2015-01-25 2 views
5

내가하고있는 프로젝트는 직렬화를 위해 Google Protobuf를 사용해야하므로 코드를 작성하기 전에 많은 스텁을 생성해야한다. 내가 사용하는Maven exec 플러그인 인자에 와일드 카드 사용하기

명령 행 인수는 다음과 같습니다이 콘솔에서 잘 작동

protoc -I=src/proto --java_out=src/main/java src/proto/*.proto 

.

이제이 수동 프로세스가 Maven 빌드의 일부가되도록 Maven exec 플러그인을 사용하려고합니다. 내가 사용하는 치어 부분이다 : 나는 와일드 카드를 제거하고를 지정하는 경우, 그것은 잘 작동 SRC/프로토

그러나/* 프로토 :.

<build> 
     <plugins> 
      <plugin> 
       <artifactId>exec-maven-plugin</artifactId> 
       <groupId>org.codehaus.mojo</groupId> 
       <version>1.3.2</version> 
       <executions> 
        <execution> 
         <id>Google Protobuf Stub Generation</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>exec</goal> 
         </goals> 
         <configuration> 
          <executable>protoc</executable> 
          <commandlineArgs>-I=src/proto --java_out=src/main/java src/proto/*.proto</commandlineArgs> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

오류라는 어떤 파일이없는 불평을 주어 특정 파일, 예.

<commandlineArgs>-I=src/proto --java_out=src/main/java src/proto/model.proto</commandlineArgs> 

Maven이 처리 할 수있는 다른 방법이있을 수 있으므로 문제가되는 와일드 카드 *라고 생각합니다.

제 질문은 어떻게 Maven에서 "해당 폴더에 .proto 확장명을 가진 모든 파일"을 지정할 수 있습니까?

+0

성공 했습니까? 도움이 더 필요하십니까? –

+1

쉘 스크립트를 작성하고이 스크립트를 maven에서 호출하여이 문제를 해결할 수있었습니다. – Kevin

+0

좋은 생각, 내 대답에 그 생각을해야합니다. –

답변

1

쉘에서 protoc 명령을 호출하는 경우 와일드 카드 연산자는 모든 일치하는 파일이있는 쉘로 대체됩니다. protoc 명령 자체가 와일드 카드를 처리 할 수 ​​없습니다. 예를 들어

:

쉘에 "LS * .txt 인"을 호출하여가, ls 명령은 인수 "* .txt 인"으로 호출되지 않습니다. 쉘은 명령 호출을 "ls file1.txt file2.txt ..."로 변환합니다.

해결책 : find xargs 및 protoc에서 명령을 작성하십시오.

1

bash를 가지고 있다면 실행 파일로 'bash', 첫 번째 인수로 '-c'를 사용하고 두 번째 인수로 전체 명령을 속여서 사용할 수 있습니다.

기본적으로 두 번째 인수는 셸에서 실행되므로 와일드 카드 (*) 문자가 작동하므로 일반적으로 명령 줄을 직접 사용하는 것과 동일한 기능을 사용합니다.

+0

내 경우에는이 옵션이 효과적이었습니다. 전화하는 대신; 실행 파일 : rm 인수 : "-rf pycompss *". 나는 부른다. 실행 파일 : bash 인수 : "-c rm -rf pycompss *" –

관련 문제