如何导入jar的所有依赖项?

时间:2018-07-10 21:47:28

标签: java maven dependencies

我有两个java maven项目-eclipse中的abc和intellij idea中的xyz。它们具有一些常见的jar依赖项。

在xyz代码中,我需要在abc的测试目录中调用一些代码。因此,我将abc转换为jar并将其导入xyz内。调用abc方法的xyz代码可以正常编译,但失败了,因为找不到abc所需的jar。这些丢失的罐子中有一些实际上存在于xyz中,而有些则不存在。

如何使xyz导入abc所需的所有依赖关系?这是重用代码的一种好方法吗?

2 个答案:

答案 0 :(得分:1)

正确的方法:

  1. 通过在“ abc”文件夹中运行mvn install,将“ abc”项目安装到本地Maven存储库中。 (这将首先构建项目,然后将JAR和POM复制到本地Maven存储库中。)
  2. 并将其添加为“ xyz”项目中的依赖项:
<dependencies>
  <dependency>
    <groupId>...</groupId>
    <artifactId>abc</artifactId>
    <version>...</version>
  </dependency>
</dependencies>

这样,“ xyz”项目在类路径上也将具有“ abc”和“ abc”的依赖项。

编辑:重用测试类can be done this way

  1. 添加maven-jar-plugin以在“ abc”中建立目标为test-jar的插件,这将创建您的测试类的JAR:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                <goals>
                    <goal>test-jar</goal>
                </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. 安装“ abc”(将安装常规JAR,测试JAR和POM)
  2. 添加为依赖项并引用test-jar分类器:
<dependencies>
    <dependency>
      <groupId>...</groupId>
      <artifactId>abc</artifactId>
      <version>...</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
</dependencies>

答案 1 :(得分:-1)

还有其他几种方法。

  • 如果abc和def项目具有一些类似的功能,则您    可以将它们分组到模块中,并在    项目,并将两个项目配置为模块,从而有效地    在一个地方共享所有依赖项,即父pom,这个    还有助于保持所有其他依赖项的版本    一致的。检查此链接以了解如何完成

    https://books.sonatype.com/mvnex-book/reference/multimodule-sect-simple-parent.html

  • 另一方面,如果abc项目仅需要def作为abc测试的依赖项,则可以将def导入为测试范围的依赖项。    这意味着它仅在测试范围内可用。那是什么意思    正常使用不需要依赖项    应用程序,仅适用于测试编译和    执行阶段,也不能传递。    因此,如下所示:-

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>