gpt4 book ai didi

java - 如何将依赖项的测试 jar 包含到 Maven 项目的部署中?

转载 作者:IT老高 更新时间:2023-10-28 20:53:36 28 4
gpt4 key购买 nike

我有两个项目,foofoo-webcom.example团体。 foo-web取决于 foo .

为了能够在不依赖外部服务的情况下开发应用程序的 UI 部分,foo 中实现了虚拟 DAO。 (它们返回静态数据,因此我们不必连接到数据库等)。

我们被要求将虚拟类移动到 src/test/java .这意味着它们不会使用 foo.jar 进行部署。从 web 项目构建的 war 。我找到了 these instructions 在 maven 网站上,但它们似乎不适合我。

foopom.xml我有:

        <plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>test-jar</id>
<phase>test-compile</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>

运行时mvn installfoo-web ,在 foo 的目标中我会得到两个 jar :foo-1.0.0-SNAPSHOT.jarfoo-1.0.0-SNAPSHOT-tests.jar .它们都可以在本地 maven 存储库中正常安装。

之前,foo-web依赖看起来像这样:

<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

这将触发 foo-1.0.0-SNAPSHOT.jar 的部署在 war 中。现在,我还想部署 -tests jar,最好只用于“本地”配置文件。

我尝试了多种方式来做到这一点:

<profile>
<id>local</id>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>test-jar</type>
</dependency>
</dependencies>
</profile>

这会导致使用不同的名称部署源 jar:com.example-foo.jar并且不部署测试jar。我也尝试使用 <classifier>而不是 <type>在依赖项中,但它仍然做同样的事情。我尝试在配置文件之外使用上述依赖项(与其他依赖项一起),但它的行为仍然相同。

如果我添加 <type>到主要依赖项(不添加其他依赖项)我部署了测试 jar(与上面的名称相同),但自然不会部署源。

与文档中所写内容的唯一区别是没有为测试依赖项指定范围。它只适用于 test范围?我能否以不同的方式部署测试类。

我知道这个问题有点复杂,如果有什么我可以澄清的,请告诉我。

谢谢!


更新:

我尝试了其他几种方法,但仍然无法正常工作。

我在 foo 中的 maven-jar-plugin 中添加了另一个执行。项目(依赖项,而不是主要的 Web 项目),我希望强制 maven 在与主要项目相同的 jar 中编译测试类,并通过不同的分类器引用大包。我无法让它工作:

<execution>
<id>local-build</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>batman</classifier>
<directory>${basedir}/src/test/java</directory> <!-- tried several variations here -->
<includes>
<include>**</include>
</includes>
</configuration>
</execution>

jar 是用 batman 生成的分类器,但我找不到任何方法让它在 jar 中包含测试类目标。

这样做,我意识到这并不依赖于 test-jar类型/tests分类器/test范围关系。当我试图指定除了主 jar 之外我正在构建的新 jar 时,我得到了与尝试包含 -tests 时相同的行为。 jar 。我检查了本地 maven 存储库,依赖项目中的所有 jar 都安装得很好,所以问题是主项目的依赖解析。

tl;博士

如果您可以使用多个分类器包含相同的依赖项,那么一切都归结为一个问题。从我到现在看到的情况来看,答案是否定的——我总是得到 com.example-foo使用不同的分类器多次指定相同的依赖项时的jar。

最佳答案

最好在你的第一个模块中配置 maven pom 文件

<project>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>

在此之后,mvn install/release 还将部署一个 Artifact foo-1.0.0-SNAPSHOT-tests.jar

然后使用分类器配置对测试 jar 的依赖(如其他响应中建议的那样)

<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>test-jar</type>
<!-- uncomment if needed in test scope only
<scope>test</scope>
-->
</dependency>

关于java - 如何将依赖项的测试 jar 包含到 Maven 项目的部署中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751860/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com