Maven - 如何在另一个ZIP依赖项中提取依赖项?

时间:2018-01-19 01:36:40

标签: maven zip maven-dependency-plugin

我有一个maven项目。

在该项目中,我有 .zip 依赖项,其中包含 jar ,我需要从中提取 jar > zip 依赖项,并让maven使用 jar 作为依赖项。我现在可以下载并解压缩zip,但是,无法找到在构建过程中将解压缩的 jar 添加为项目依赖项的方法。

以下是我目前正在进行拆包的内容:

<dependency>
  <groupId>com.bar</groupId>
  <artifactId>foo</artifactId>
  <version>${foo.version}</version>
  <type>zip</type>
</dependency>
...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>unpack</id>
        <goals>
          <goal>unpack-dependencies</goal>
        </goals>
        <phase>validate</phase>
        <configuration>
          <includeGroupIds>com.bar</includeGroupIds>
          <includeArtifactIds>foo</includeArtifactIds>
          <outputDirectory>${basedir}/target</outputDirectory>
          <type>jar</type>
        </configuration>
      </execution>
    </executions>
 </plugin>

我读了一些其他帖子,您可以尝试使用此方法将jar添加到类路径中。

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <additionalClasspathElements>
           <additionalClasspathElement>${basedir}/target</additionalClasspathElement>
   </additionalClasspathElements>
 </configuration>
</plugin>

即使这样做,我仍然无法在我的项目中引用 foo.jar 中的包。

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

前一段时间,我遇到了同样的问题。我有一个 zip 文件作为我的依赖项,在构建过程中我需要提取它并将我生成的包中的内容分开。

我不知道您用来投放项目的是什么,但当时我已经使用了maven-antrun-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>2.6</version>
</plugin>

有了这个,我在我的unzip配置中使用了标记target。您可以看到herehere。我建议您不要在使用task代码时使用,您最好选择target代码。

希望它对你有所帮助。

答案 1 :(得分:0)

如果maven在没有巧妙地破坏其他地方的情况下使用它,则必须将jar安装到本地存储库中。

我认为在目标/中解压缩zip文件然后在生成的jar上调用install:install-file的组合可以做你需要的。几年前我问过如何在正常构建中集成 - 你可能会发现答案是相关的。 Multiple install:install-file in a single pom.xml

答案 2 :(得分:0)

我们假设在解压缩zip之后,你的模块的目标文件夹中有foo.jar:${project.build.directory}/foo.jar

有了这个,你可以声明指向那个罐子的System Dependency,例如。

<dependency>
  <groupId>foo</groupId>
  <artifactId>foo.jar</artifactId>
  <systemPath>${project.build.directory}/foo.jar</systemPath>
</dependency>

提示:如果您不想在每次清理时删除/重新下载jar(某些IDE会抱怨jar并不总是存在),只需在${project.basedir}下载一次。

要下载jar一次,您可以将“解包”执行放在profile中,只有在jar丢失时才会激活。

<profiles>
  <profile>
    <activation>
      <file>
        <missing>${project.basedir}/foo.jar</missing>
      </file>
    </activation>
    ...
  </profile>
</profiles>