2015-01-25 14 views
5

Dự án tôi đang làm việc trên cần phải sử dụng Google Protobuf để tuần tự hóa, do đó, một số sơ khai phải được tạo trước khi mã của tôi được tạo.Sử dụng ký tự đại diện trong các đối số plugin của Maven exec

Các đối số dòng lệnh tôi sử dụng là:

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

này hoạt động tốt trong giao diện điều khiển.

Bây giờ tôi muốn sử dụng plugin Maven exec để quy trình thủ công này trở thành một phần của bản dựng Maven. Phần pom tôi sử dụng là:

<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> 

lỗi được đưa ra khiếu nại không có tập tin gọi là:. Src/proto/* proto

Tuy nhiên, nó hoạt động tốt nếu tôi loại bỏ các ký tự đại diện và chỉ định một tệp cụ thể, ví dụ

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

Tôi nghĩ đó là ký tự đại diện * gây ra sự cố khi Maven có cách xử lý khác.

Câu hỏi của tôi là làm cách nào tôi có thể chỉ định "Tất cả các tệp có đuôi .proto trong thư mục đó" trong Maven?

+0

Bạn đã thành công hay bạn sẽ cần thêm trợ giúp? –

+1

Tôi đã quản lý để vượt qua vấn đề này bằng cách viết một kịch bản shell và gọi kịch bản đó trong maven. – Kevin

+0

Ý tưởng hay, nên nghĩ về điều đó trong câu trả lời của tôi. –

Trả lời

1

Nếu bạn đang gọi lệnh protoc trên trình bao, toán tử ký tự đại diện được thay thế bằng trình bao với tất cả các tệp phù hợp. lệnh protoc không thể xử lý ký tự đại diện.

Ví dụ:

Bằng cách gọi "ls * .txt" trên vỏ của bạn, lệnh ls không được gọi với tham số "* .txt". Shell dịch lệnh gọi đến "ls file1.txt file2.txt ..."

Giải pháp: Tạo lệnh ra khỏi tìm xargs và protoc.

1

Nếu bạn có bash, bạn có thể gian lận và sử dụng 'bash' làm thực thi, '-c' làm đối số đầu tiên và lệnh đầy đủ của bạn làm đối số thứ hai.

Về cơ bản, đối số thứ hai sẽ được chạy trong trình bao, vì vậy ký tự đại diện (*) hoạt động và bạn thường nhận được cùng chức năng như sử dụng dòng lệnh trực tiếp.

+0

Tùy chọn này hoạt động trong trường hợp của tôi. Thay vì gọi; thực thi: đối số rm: "-rf pycompss *". Tôi gọi; thực thi: đối số bash: "-c rm -rf pycompss *" –

Các vấn đề liên quan