2010-02-03 32 views
28

Tôi có một số tệp nguồn java sử dụng tiền tố gói (chúng mô phỏng một số lớp JDK). Tôi sử dụng những tập tin này với tiền tố để chạy với một số xét nghiệm đơn vị. Nếu các bài kiểm tra vượt qua, tôi muốn tạo ra một lọ chứa các tệp nguồn nhưng với tiền tố gói bị loại bỏ khỏi tất cả các tệp java.Tìm kiếm đầy đủ và thay thế chuỗi trong tệp nguồn khi sao chép tài nguyên

Tôi đang sử dụng maven cho bản dựng. Có ai biết cách để làm điều này không? Về cơ bản những gì tôi muốn là một cái gì đó giống như các tính năng lọc plugin tài nguyên, nhưng điều đó không tìm kiếm và thay thế thích hợp (như: s/my.package.prefix .// g), thay vì lọc trên $ {vars}.

Trả lời

23

Điều này có thể được giải quyết bằng plugin chống vi rút. Thứ nhất các nguồn cần phải được sao chép vào thư mục đích, với:

<build> 
    ... 
    <resources> 
    <resource> 
     <directory>src/main/java</directory> 
     <includes> 
     <include>**/*.java</include> 
     </includes> 
    </resource> 
    </resources> 
    ... 
</build> 

Thứ hai bạn sử dụng nhiệm vụ replace của các plugin antrun để thay thế các tập tin bằng cách sử dụng chuẩn bị giai đoạn gói

<build> 
    ... 
    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>prepare-package</phase> 
     <configuration> 
      <tasks> 
      <replace token= "my.package.prefix." value="" dir="target/classes">         
       <include name="**/*.java"/> 
      </replace> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
    ... 
</build> 

này sẽ sao chép các tệp nguồn để nhắm mục tiêu/các lớp trong giai đoạn xử lý tài nguyên, thực hiện tìm kiếm và thay thế trên các tệp tại chỗ trong thư mục đích/lớp trong giai đoạn chuẩn bị gói và cuối cùng chúng sẽ được gộp lại trong giai đoạn gói.

+0

Tôi thích cách này như cho phép này nhiều giai đoạn thi công xảy ra, và cho phép để làm việc trên khác nhau tệp riêng. – JayZee

+2

Việc thay thế được thực hiện đúng nhưng thay thế .java không được biên dịch và không được bao gồm trong gói được tạo. Đó là vì bạn áp dụng plugin thay thế trong giai đoạn chuẩn bị gói, khi các tệp nguồn chỉ được thu thập và chúng chưa được biên dịch. Bạn phải áp dụng giải pháp này trong giai đoạn biên dịch, và nó hoạt động !!! – AntuanSoft

+0

Để làm điều gì đó trong các tệp Java, tôi có thể đề xuất [templating-maven-plugin] (http://www.mojohaus.org/templating-maven-plugin/) – khmarbaise

39

Bạn cũng có thể sử dụng

http://code.google.com/p/maven-replacer-plugin/

100% maven và làm chính xác những gì bạn muốn và nhiều hơn nữa

+0

Bất kể không được chấp nhận, đây là "Maven Way". +1 –

+0

Vâng, tôi sẽ không quá quyết đoán về "Maven Way". Plugin này có vẻ thực sự quá giống với một anh trai chống lại nó. Dù sao, việc phát triển tệp pom.xml với các khối và khối XML gần như là các cấu hình có lập trình chắc chắn là * không * cách maven. –

+1

Liên kết đưa ra 404 và tôi gặp sự cố khi giải quyết vấn đề. Bất kỳ ý tưởng gì đã xảy ra với plugin? –

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