当前位置: 首页 > 面试题库 >

如何在Maven项目的部署中包含依赖项的测试jar?

姜德泽
2023-03-14
问题内容

我有两个项目,foo并且foo-web属于该com.example小组。foo-web取决于foo

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

我们被要求将虚拟类移至src/test/java。这意味着他们不会被部署foo.jar到从Web项目构建的战争中。我在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战争的部署。现在,我还想部署-testsjar,最好只部署“本地”配置文件。

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

<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范围关系。当我尝试指定除主要容器之外的新容器时,我得到的行为与尝试包含该-tests容器时的行为相同。我检查了本地maven存储库,并且从属项目中的所有jar都已正确安装,因此问题出在主项目的属性解析中。

tl; dr

一切都归结为您是否可以将相同的依赖项包含在多个分类器中。从我所看到的到现在,答案是否定的- 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安装/发行版还将部署工件 foo-1.0.0-SNAPSHOT-tests.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>


 类似资料:
  • 我使用的是Eclipse Luna、Maven3和Websphere Liberty 8.5.5。我在Eclipse中添加了websphere liberty server。部署在liberty中的EAR/WAR项目不包括WAR的WEB-INF/lib中的maven依赖项。如果导出EAR或WAR,则导出的文件包含所有依赖项。会出什么问题?

  • 问题内容: 有没有一种方法可以强制maven(2.0.9)将所有依赖项包含在单个jar文件中? 我有一个构建到单个jar文件中的项目。我希望将依赖项中的类也复制到jar中。 更新:我知道我不能只在jar文件中包含jar文件。我正在寻找一种方法来解压缩指定为依赖项的jar,并将类文件打包到我的jar中。 问题答案: 你可以使用带有描述符的插件来执行此操作。这是我们之一的相关块,它可以完成此任务:

  • 我们正在尝试使用java webstart开发一个打印应用程序。我们使用eclipse将jar创建为普通jar文件。我们的应用程序需要外部库来连接数据库、将数据转换为字节等。 我们以前可以通过将必要的JAR放入jre文件夹的/ext/目录来实现这一点。然而,这导致了与tomcat服务器的库冲突,所以我们希望避免这种方法。 我们还尝试将项目导出为可运行的jar,因为所需的库也已打包在jar中。但是当

  • 问题内容: 我试图将我的Maven项目部署到Glassfish 4,但部署失败时出现以下异常: 也许值得一提的是它的构建还不错。.我不知道它要寻找的依赖项,对我来说有点神秘。任何帮助将不胜感激。 编辑-根据要求,我的POM文件: http://maven.apache.org/xsd/maven-4.0.0.xsd“> 4.0.0 问题答案: 该问题是由WAR文件中包含的lib 引起的。该lib已

  • 我正在开发一个Java项目,使用maven作为依赖项管理器/构建工具。我当前在将依赖项的依赖项解析到正确版本时遇到问题。 有问题的依赖项称为JasperReports-Functions-6.1.0.jar,它不是托管在maven repo中,而是以jar形式提供的。 如何强制jar依赖项使用子依赖项的某个版本?

  • 问题:Maven在我的测试中找不到一些依赖项 在我的pom中是这样导入的。xml: 我已经试过了: mvn测试编译 使Intellij缓存无效 重启Intellij 清除. m2并重建项目