我在使用maven-assembly-plugin时遇到了问题。
我想在包阶段获得一个包含所有项目依赖关系的目录。 但我有一个传递依赖与编译范围错过了 汇编输出目录。
错过的罐子是batik-js-1.7.jar。这是这个jar的依赖树
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ sbercap-dependencies ---
[INFO] ru.spi2.test:sbercap-dependencies:jar:1.0-SNAPSHOT
[INFO] \- org.apache.xmlgraphics:batik-transcoder:jar:1.7:compile
...
[INFO] +- org.apache.xmlgraphics:batik-bridge:jar:1.7:compile
[INFO] | +- org.apache.xmlgraphics:batik-anim:jar:1.7:compile
[INFO] | +- org.apache.xmlgraphics:batik-css:jar:1.7:compile
[INFO] | +- org.apache.xmlgraphics:batik-ext:jar:1.7:compile
[INFO] | +- org.apache.xmlgraphics:batik-parser:jar:1.7:compile
[INFO] | +- org.apache.xmlgraphics:batik-script:jar:1.7:compile
[INFO] | | \- org.apache.xmlgraphics:batik-js:jar:1.7:compile
...
当程序集插件完成时,其他依赖项(batik-anim-1.7.jar, batik-css-1.7.jar)成功添加到输出目录。 batik-js-1.7.jar 错过了(截图附件)。
另一方面,如果我尝试使用maven-dependency-plugin复制所有依赖项, batik-js-1.7.jar已成功添加到文件夹中(屏幕截图 附)。
这是我的pom.xml
中的依赖项和构建块<dependencies>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-transcoder</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/dependency-libs
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly-descriptor.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
汇编描述符是
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>assembly</id>
<formats>
<format>dir</format>
</formats>
<dependencySets>
<dependencySet>
</dependencySet>
</dependencySets>
</assembly>
你能解释一下我,我做错了吗?为什么错过这个图书馆 从汇编输出?
我试图在谷歌中发现任何类似的问题,但还有另一个问题 - 来自测试范围的依赖关系或pom.xml中错过的依赖关系。依赖集 useTransitiveDependencies属性默认为true,所以我真的不知道 为什么我得到这个程序集插件的结果。
我的maven版本:
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T22:49:05+03:00)
Maven home: C:\soft\apache-maven-3.5.3\bin\..
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_131\jre
Default locale: ru_RU, platform encoding: Cp1251
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
maven-assembly-plugin版本为3.1.0
请问你能帮帮我吗?
感谢。
答案 0 :(得分:0)
如果以循环依赖方式声明此依赖项,则使用maven-assembly-plugin添加传递依赖项存在问题。
https://issues.apache.org/jira/projects/MASSEMBLY/issues/MASSEMBLY-782
org.apache.xmlgraphics:batik -...:1.7在batik-bridge和batik-script之间有循环依赖。
您可以选择多个选项来解决此问题。
更新到更新版本的batik -...库,它没有任何循环依赖。
如果您不能使用以前的选项,则可以配置pom.xml - 排除循环依赖项并将其解压缩以使此依赖项不可传递。
<dependencies>
<dependency>
<groupId>internal-module-groupId</groupId>
<artifactId>internal-module-artifactId</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-bridge</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-script</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-script</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-bridge</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
感谢来自maven用户邮件列表的Thorsten Heit的帮助。