2013-05-16 14 views
11

Tôi đã tìm kiếm trên diễn đàn để tìm câu trả lời cho vấn đề của mình, nhưng tôi không thể tìm thấy nó. Vấn đề của tôi là:Làm thế nào để làm cho maven lấy tài nguyên từ/src/test/resources thay vì/src/main/resources cho một dự án phụ thuộc?

Tôi có hai dự án: ProjectA và ProjectB. ProjectB sử dụng ProjectA. Trong ProjectA tôi có hai thư mục: /src/main/resources và/src/test/resources. Trong ProjectB tôi chạy: mvn clean install. Tôi muốn, trong giai đoạn thử nghiệm, các lớp trong ProjectB sử dụng tài nguyên từ/src/test/resources thay vì/src/main/resources.

Đây là những gì tôi đã cố gắng: http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html

Nó tương tự như vấn đề của tôi, nhưng sau khi tôi cấu hình mục tiêu thử nghiệm jar cho PROJECTA, ProjectB vẫn chạy các bài kiểm tra trên đường, mà các lớp học trong sử dụng tài sản PROJECTA từ/src/main/resources thay vì/src/test/resources.

pom.xml của tôi trong PROJECTA trông giống như:

<project ...> 
    <parent> 
     ... 
    </parent> 

    <modelVersion>4.0.0</modelVersion> 
    <artifactId>ProjectA</artifactId> 
    <packaging>jar</packaging> 

    <dependencies> 
     ... 
    </dependencies> 

    <build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
     <testResources> 
      <testResource> 
       <directory>src/test/resources</directory> 
       <filtering>true</filtering> 
      </testResource> 
     </testResources> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>test-jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Trong ProjectB pom.xml của tôi trông giống như:

<project ...> 
    <parent> 
     ... 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>ProjectB</artifactId> 
    <packaging>jar</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.6</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>integration-test</goal> 
          <goal>verify</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>com.sensano</groupId> 
      <artifactId>ProjectA</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>ProjectA</groupId> 
      <artifactId>ProjectA</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
      <scope>test</scope> 
      <type>test-jar</type> 
     </dependency> 
    </dependencies> 

</project> 

Có một phương pháp Bất kỳ trợ giúp sẽ được đánh giá cao!

Trân trọng,
Mateusz Moroz

Trả lời

8

Các src/main/resources được đóng gói vào file jar tên ProjectA.jar như cấu trúc sau đây

ProjectA.jar 
|`-com 
| `-sensano 
| `-foo 
`-[the resource form src/main/resources] 

Đáng buồn src/test/resources cũng được đóng gói vào file jar tên ProjectA-tests.jar như sau cấu trúc là tốt.

ProjectA-tests.jar 
|`-com 
| `-sensano 
| `-foo 
`-[the resource form src/test/resources] 

Nếu tên tài nguyên mà bạn yêu cầu là tên chung cho cả hai từ src/main/resourcessrc/test/resources. Có thể có một số sự cố trình tải lớp. IMHO, chiến thắng gần nhất.

Kể từ khi bạn đặt ProjectA trước ProjectA-tests, sau đó có thể là nguyên nhân gốc rễ rằng ProjectB sẽ sử dụng src/main/resources từ ProjectA vì nó là gần nhất.

Vui lòng thử để trao đổi bằng cách đặt ProjectA-tests trước ProjectA như sau: -

<dependencies> 
    <dependency> 
     <groupId>com.sensano</groupId> 
     <artifactId>ProjectA</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>test</scope> 
     <type>test-jar</type> 
    </dependency> 
    <dependency> 
     <groupId>com.sensano</groupId> 
     <artifactId>ProjectA</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

gần nhất sẽ là ProjectA-tests, và ProjectB nên sử dụng src/test/resources để thay thế.

Tôi hy vọng điều này có thể hữu ích.

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