当前位置: 首页 > 知识库问答 >
问题:

如何让maven为一个依赖项目从/src/test/resources而不是/src/main/resources取资源?

淳于亦
2023-03-14

我在论坛上搜索了我的问题的答案,但我找不到。我的问题是:

我有两个项目:项目A和项目B。ProjectB使用ProjectA。在ProjectA中,我有两个文件夹:/src/main/resources和/src/test/resource。在ProjectB中,我运行:mvn clean install。我希望,在测试阶段,ProjectB中的类使用/src/test/resources中的资源,而不是/src/main/resource中的资源。

这就是我所尝试的:http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html

这类似于我的问题,但是在我为 ProjectA 配置了 test-jar 目标之后,ProjectB 仍然以项目 A 中的类使用 /src/main/resources 中的属性而不是 /src/test/resources 的方式运行测试。

这是我的pom。ProjectA中的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中,my 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个答案

欧阳乐生
2023-03-14

src/main/resources被打包到名为ProjectA的jar文件中。jar如下结构

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

遗憾的是,< code>src/test/resources也打包到名为< code>ProjectA-tests.jar的jar文件中,结构如下。

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

如果< code>src/main/resources和< code>src/test/resources中所需的资源名称相同。可能有一些类装入器的问题。依我看,最近的赢了。

由于您将< code>ProjectA放在< code>ProjectA-tests之前,这可能是< code>ProjectB将使用来自< code>ProjectA的< code>src/main/resources的根本原因,因为它是最近的。

请尝试通过将 ProjectA 测试放在 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-testProjectB应改用src/test/Resources

我希望这会有所帮助。

 类似资料:
  • 我为每个生成环境都有一个自定义属性文件夹。我已经为它定义了配置文件并添加了不同的文件夹。它们会被正确地捡起来。但是,src/main/resources中的资源没有被拾取。如果netbeans 8有什么不同的话,我会使用它。我的问题是一旦激活了不同的概要文件,是否需要在概要文件中重新指定主要资源或测试资源?多谢了。 我正在使用Maven开发一个java web项目。有一些web服务的xml文件(h

  • 我有一个maven Spring项目,里面有文件。如何在SpringMVC控制器中读取它。 我正在使用 但是is.

  • 我在我的maven项目中的src/main/资源下放置了一个文件,文件名只是temp.txt. 当我试图打开文件时: 我得到一个错误: src/main/资源下的所有文件都放在maven下类路径的根文件夹中。那么为什么程序不能在这里找到文件呢?

  • 我正在为我的maven项目添加一个可执行的jar测试。我已经编辑了pom文件,以使用src/main/resources中的一个主类。但是,当我尝试运行jar时,它找不到我的主类。有什么想法吗?

  • 问题内容: 在我的Maven项目中,我在src / main / resources中有一个xls文件。当我这样阅读时: 一切都好。 但是我想使用getResourceAsStream将其作为InputStream读取。当我执行此操作时,无论是否使用斜线,我总会得到NPE。 不管斜线是否存在,或者如果我使用getClassLoader()方法,我仍然会得到一个NullPointer。 我也尝试过这

  • 我有两个包含java代码和资源的工作目录,一个用于测试,另一个用于生产。 src/main/java src/main/resources src/test/java src/test/resources 当运行我的代码并从FileInputStream读取文件时,如下所示: 只要文件位于项目的根目录中,就可以正常工作。如果我将文件放在资源文件夹中并直接指向它,它也可以工作,如下所示: 有没有办法