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



我有一个maven项目。

在该项目中,我有一个携带 jar.zip依赖项,我需要将该 jarzip 依赖项中提取出来,并让 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 中的包。

有人可以帮助我吗?

为了让 maven 在不巧妙地破坏其他地方的东西的情况下使用它,您必须将 jar 安装到本地存储库中。

我认为在 target/中解压缩 zip 文件然后在生成的 jar 上调用 install:install-file 的组合可以满足您的需求。 几年前我问过如何将其集成到普通构建中 - 您可能会发现答案相关。多个安装:在单个pom中安装文件.xml

假设在

解压缩 zip 后,模块的目标文件夹中有 foo.jar:${project.build.directory}/foo.jar

完成此操作后,您可以声明指向该jar的系统依赖项,例如

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

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

要下载一次 jar,您可以将"解压缩"执行放在一个配置文件中,该配置文件仅在缺少 jar 时激活。

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

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

我不知道你用什么来交付你的项目,但当时我已经使用了maven-antrun-plugin

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

有了这个,我在target配置中使用了标签unzip。正如你在这里或这里看到的。我只是不建议您像他们正在使用的那样使用 task 标签,您最好更喜欢 target 标签。

希望对您有所帮助。

最新更新