我在论坛上搜索了我的问题的答案,但我找不到它。我的问题是:
我有两个项目:ProjectA和ProjectB。 ProjectB使用ProjectA。在ProjectA中,我有两个文件夹: / src / main / resources和/ src / test / resources。 在ProjectB中我运行:mvn clean install。我想,在测试阶段,ProjectB中的类使用/ src / test / resources中的资源而不是/ src / main / resources。
它类似于我的问题,但是在为ProjectA配置了test-jar目标之后,ProjectB仍然运行测试,ProjectA中的类使用/ src / main / resources中的属性而不是/ src / test /资源。
我在ProjectA中的pom.xml看起来像:
<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>
在ProjectB中,我的pom.xml看起来像:
<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>
有方法吗? 任何帮助将不胜感激!
此致
Mateusz Moroz
答案 0 :(得分:10)
将src/main/resources
打包到名为ProjectA.jar
的jar文件中,作为以下结构
ProjectA.jar
|`-com
| `-sensano
| `-foo
`-[the resource form src/main/resources]
遗憾的是,src/test/resources
也被打包到名为ProjectA-tests.jar
的jar文件中,作为以下结构。
ProjectA-tests.jar
|`-com
| `-sensano
| `-foo
`-[the resource form src/test/resources]
如果您需要的资源名称与src/main/resources
和src/test/resources
的名称相同。可能会有一些类加载器问题。恕我直言,最近的胜利。
由于您将ProjectA
放在ProjectA-tests
之前,因此可能是ProjectB
将src/main/resources
使用ProjectA
的根本原因,因为它是ProjectA-tests
最接近。
请尝试将ProjectA
放在<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>
之前进行交换,如下所示: -
ProjectA-tests
最近的是ProjectB
,src/test/resources
应该使用{{1}}。
我希望这可能有所帮助。