执行maven-assembly-plugin后输出中缺少依赖关系

时间:2018-04-02 15:15:25

标签: maven maven-assembly-plugin

我在使用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 错过了(截图附件)。 batik-js-1.7.jar is missed by maven-assembly-plugin

另一方面,如果我尝试使用maven-dependency-plugin复制所有依赖项, batik-js-1.7.jar已成功添加到文件夹中(屏幕截图  附)。 batik-js-1.7.jar is added to the folder by maven-dependency-plugin

这是我的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

请问你能帮帮我吗?

感谢。

1 个答案:

答案 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之间有循环依赖。

您可以选择多个选项来解决此问题。

  1. 更新到更新版本的batik -...库,它没有任何循环依赖。

  2. 如果您不能使用以前的选项,则可以配置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>
    
  3. 感谢来自maven用户邮件列表的Thorsten Heit的帮助。