[maven-2] Maven의 pom.xml에서 쉘 명령을 실행하고 싶습니다.

Maven으로 Linux 셸 명령을 실행하고 싶습니다. 내가 시도한 것은 다음과 같습니다.

<plugin>  
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>exec-maven-plugin</artifactId> 
  <version>1.1.1</version> 
  <executions>
    <execution>
      <goals>
        <goal>exec</goal> 
      </goals>
    </execution>
  </executions>
  <configuration>
    <executable>hostname</executable> 
  </configuration>
</plugin>



답변

나를 위해 일한 것은 다음과 같습니다.

<plugin>
  <artifactId>exec-maven-plugin</artifactId>
  <groupId>org.codehaus.mojo</groupId>
  <executions>
    <execution><!-- Run our version calculation script -->
      <id>Version Calculation</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>exec</goal>
      </goals>
      <configuration>
        <executable>${basedir}/scripts/calculate-version.sh</executable>
      </configuration>
    </execution>
  </executions>
</plugin>


답변

여기서 문제는 예상되는 것이 무엇인지 모른다는 것입니다 . 현재 설정에서 명령 줄에서 플러그인을 호출하면 다음과 같이 작동합니다.

$ mvn exec : exec
[정보] 프로젝트 검색 중 ...
[정보] ----------------------------------------------- -------------------------
[정보] 건물 Q3491937
[정보] 작업 세그먼트 : [exec : exec]
[정보] ----------------------------------------------- -------------------------
[정보] [exec : exec {execution : default-cli}]
[정보] 노트북
[정보] ----------------------------------------------- -------------------------
[정보] 빌드 성공
[정보] ----------------------------------------------- -------------------------
...

전역 configuration이 사용되고 hostname명령이 실행됩니다 ( laptop내 호스트 이름 임). 즉, 플러그인이 예상대로 작동합니다.

이제 플러그인을 빌드의 일부로 실행 하려면 특정 단계에서 목표 를 바인딩 해야합니다 . 예를 들어 바인딩하려면 다음을 수행하십시오 compile.

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1.1</version>
    <executions>
      <execution>
        <id>some-execution</id>
        <phase>compile</phase>
        <goals>
          <goal>exec</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <executable>hostname</executable>
    </configuration>
  </plugin>

그리고:

$ mvn 컴파일
[정보] 프로젝트 검색 중 ...
[정보] ----------------------------------------------- -------------------------
[정보] 건물 Q3491937
[정보] 작업 세그먼트 : [컴파일]
[정보] ----------------------------------------------- -------------------------
[정보] [자원 : 자원 {실행 : 기본 자원}]
[정보] 'UTF-8'인코딩을 사용하여 필터링 된 리소스를 복사합니다.
[정보] 존재하지 않는 resourceDirectory / home / pascal / Projects / Q3491937 / src / main / resources 건너 뛰기
[정보] [컴파일러 : 컴파일 {실행 : 기본 컴파일}]
[정보] 컴파일 할 항목이 없습니다. 모든 클래스가 최신 상태입니다.
[정보] [exec : exec {execution : some-execution}]
[정보] 노트북
[정보] ----------------------------------------------- -------------------------
[정보] 빌드 성공
[정보] ----------------------------------------------- -------------------------
...

configuration내부를 지정할 수 있습니다 execution.


답변

해결되었습니다. 문제는 실행 파일이 Linux에서 다른 방식으로 작동한다는 것입니다. .sh 파일을 실행하려면 아래와 같이 작성해야합니다. pom.xml에 작성하십시오.

    <plugin>
        <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
        <groupId>org.codehaus.mojo</groupId>
        <executions>
            <execution><!-- Run our version calculation script -->
                <id>Renaming build artifacts</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>bash</executable>
            <commandlineArgs>handleResultJars.sh</commandlineArgs>
                </configuration>
            </execution>
        </executions>
    </plugin>


답변

2 옵션 :

  1. 어떤 단계에도 바인딩하지 않고 maven에서 명령을 실행하고 싶고, 명령을 입력하고 maven이 실행하고 , Maven이 무언가를 실행하고 싶을뿐입니다. compile / package / … npm startmaven 으로 실행하고 싶다고 말하면 아래에서 얻을 수 있습니다.

mvn exec:exec -Pstart-node

이를 위해 아래 maven 섹션이 필요합니다.

  <profiles>
    <profile>
      <id>start-node</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>npm</executable>
              <arguments><argument>start</argument></arguments>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>
  1. 특정 단계에있는 동안 maven에서 임의의 명령실행 하려고합니다. 예를 들어 설치 단계에있을 때 실행할 npm install수 있습니다.

mvn install

작동하려면 아래 섹션이 필요합니다.

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.3.2</version>
    <executions>

      <execution>
        <id>npm install (initialize)</id>
        <goals>
          <goal>exec</goal>
        </goals>
        <phase>initialize</phase>
        <configuration>
          <executable>npm</executable>
          <arguments>
            <argument>install</argument>
          </arguments>
        </configuration>
      </execution>


답변

감사! 토머 벤 데이비드. 그것은 나를 도왔다. npm install을 언급했듯이 데모 폴더에 pip 설치를 수행하고 있습니다.

<groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>pip</executable>
              <arguments><argument>install</argument></arguments>
             <workingDirectory>${project.build.directory}/Demo</workingDirectory>
            </configuration>


답변