我有一个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 中的包。
有人可以帮助我吗?
答案 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
。您可以看到here或here。我建议您不要在使用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>