Как заставить maven брать ресурсы из /src/test /resources вместо/src/main / resources для зависимого проекта?

я поискал по форуму, чтобы найти ответ на мою проблему, но я не смог найти его. Моя проблема в том, что:

у меня есть два проекта: ProjectA и ProjectB. ProjectB использует ProjectA. В ProjectA у меня есть две папки: / src / main / resources and/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

это похоже на мою проблему, но после того, как я настроил цель test-jar для ProjectA, ProjectB все еще запускает тесты таким образом, что классы в ProjectA используют свойства из /src/main/resources вместо /src/test/resources.

мой пом.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 мой ПФЛ.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>

есть ли способ Любая помощь будет оценена!

С уважением,
Матеуш Мороз!--3-->

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 вместо.

надеюсь, это поможет.