Как заставить maven взять ресурсы из /src/test/resources вместо/src/main/resources для зависимого проекта?
Я искал форум, чтобы найти ответ на мою проблему, но я не смог его найти. Моя проблема в том, что:
У меня есть два проекта: ProjectA и ProjectB. ProjectB использует ProjectA. В ProjectA у меня две папки:
/src/main/resources и /src/test/resources.
В ProjectB я запускаю: mvn clean install. Я хочу, чтобы на этапе тестирования классы в ProjectB использовали ресурсы из /src/test/resources вместо/src/main/resources.
Это то, что я пробовал:
http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html
Это похоже на мою проблему, но после того, как я сконфигурировал цель тестового баннера для ProjectA, ProjectB все еще запускает тесты на этом пути, эти классы в ProjectA используют свойства из /src/main/resources вместо/src/test/ресурсы.
Мой pom.xml в ProjectA выглядит следующим образом:
<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>
Есть ли способ
Любая помощь будет оценена!
С уважением,
Матеуш Мороз
Ответы
Ответ 1
src/main/resources
упаковываются в файл jar с именем ProjectA.jar
в виде следующей структуры
ProjectA.jar
|`-com
| `-sensano
| `-foo
`-[the resource form src/main/resources]
К сожалению, src/test/resources
также упаковываются в файл jar с именем ProjectA-tests.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
.
Надеюсь, это поможет.