tar.gz文件中的Maven依赖项

时间:2017-10-25 15:20:25

标签: maven tar build-dependencies

所以我的repo中有以下tar.gz文件,其结构为:

> A.tar.gz
>     |
>     |____ a.tar.gz
>     |
>     |____ b.tar.gz
>              |
>              |_____ folderA
>              |
>              |_____ folderB
>                       |
>                       |______ jar1.jar
>                       |
>                       |______ jar2.jar

现在在我的另一个项目的POM文件中,我想将jar1和jar2添加为依赖项。到目前为止,我有以下内容:

    <dependency>
        <groupId>com.groupid</groupId>
        <artifactId>master</artifactId>
        <version>18.1</version>
        <type>tar.gz</type>
        <classifier>bin</classifier>
    </dependency>

这使得tar文件可用。然后我尝试解压缩为:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                    <configuration>
                        <includeTypes>tar.gz</includeTypes>
                        <includeArtifactIds>master</includeArtifactIds>
                        <outputDirectory>target/somefolder</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

但是,在运行构建时,我仍然没有将jar作为依赖项。我相信我错过了什么,所以任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:0)

所以你有JAR依赖项位于项目中你想要的另一个tar.gz依赖项中。到目前为止一直很好,问题是你正试图:

  1. 使第一个.tar.gz依赖项可用(确定)
  2. 启动构建以解压缩罐子(确定)
  3. 在同一版本中添加解压缩的jar作为依赖项 (不可能)
  4. 一次性运行。这在Maven设计中是不可能的(据我所知)。即使你确实找到了一种方法,这样做会过度复杂化你的构建并打破Maven设计,可能会导致其他问题。

    您提到您无法控制其他团队的打包,似乎您也无法在Nexus repo上上传所述依赖项。您可以做的是在运行构建之前通过执行以下操作在本地存储库中使JAR依赖项可用:

    1. 下载tar.gz文件并将其解压缩
    2. 使用mvn install:install-file -Dfile=path/to/jar1.jar -DgroupId=com.mycompany -DartifactId=jar1 -Dversion=1.0.0 -Dpackaging=jar之类的命令在本地Maven仓库中安装jar依赖项,并为每个jar安装适当的版本,groupdId和artifactId(有关详细信息,请参阅Guide to installing 3rd party JARs
    3. 现在,您只需将jar依赖项提及为<dependency>
    4. 即可运行原始项目

      通过这种方式,您将在Maven本地存储库中手动安装jar依赖项,使它们可用于您的项目,而无需Nexus存储库或进一步解压缩。您可以手动执行步骤1和2,也可以创建另一个Maven项目,在运行主项目之前必须运行该项目。为此,您可以创建一个新项目并使用maven-dependency-plugin,就像您已经使用maven-exec-plugin一样运行mvn install:install-file命令。

      请注意,必须为将运行项目的每台计算机执行此过程。正如@khmarbaise所提到的,最好通过Nexus等存储库管理器直接使用您的依赖项,而不必执行其他步骤,但此临时解决方法应该可以正常工作。