所以我的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作为依赖项。我相信我错过了什么,所以任何帮助都会受到赞赏!
答案 0 :(得分:0)
所以你有JAR依赖项位于项目中你想要的另一个tar.gz依赖项中。到目前为止一直很好,问题是你正试图:
一次性运行。这在Maven设计中是不可能的(据我所知)。即使你确实找到了一种方法,这样做会过度复杂化你的构建并打破Maven设计,可能会导致其他问题。
您提到您无法控制其他团队的打包,似乎您也无法在Nexus repo上上传所述依赖项。您可以做的是在运行构建之前通过执行以下操作在本地存储库中使JAR依赖项可用:
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)<dependency>
通过这种方式,您将在Maven本地存储库中手动安装jar依赖项,使它们可用于您的项目,而无需Nexus存储库或进一步解压缩。您可以手动执行步骤1和2,也可以创建另一个Maven项目,在运行主项目之前必须运行该项目。为此,您可以创建一个新项目并使用maven-dependency-plugin,就像您已经使用maven-exec-plugin一样运行mvn install:install-file
命令。
请注意,必须为将运行项目的每台计算机执行此过程。正如@khmarbaise所提到的,最好通过Nexus等存储库管理器直接使用您的依赖项,而不必执行其他步骤,但此临时解决方法应该可以正常工作。