如何使用maven依赖插件将类型为pom的依赖项复制到一个位置

时间:2017-12-21 10:59:12

标签: maven dependencies maven-dependency-plugin

需要解决以下依赖关系并将子依赖关系复制到特定位置。

    <dependency>
        <groupId>org.wildfly</groupId>
        <artifactId>wildfly-ejb-client-bom</artifactId>
        <version>${version.org.wildfly.wildfly-ejb-client-bom}</version>
        <type>pom</type>
        <scope>import</scope>   
    </dependency>
    <dependency>
        <groupId>org.wildfly</groupId>
        <artifactId>wildfly-jms-client-bom</artifactId>
        <version>${version.org.wildfly.wildfly-jms-client-bom}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

但是当我使用maven依赖插件复制时,只复制pom文件,而不是那些poms中定义的依赖项。

我的插件如下,

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>                         
                        <goal>copy</goal>
                    </goals>                        
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>org.wildfly</groupId>
                                <artifactId>wildfly-ejb-client-bom</artifactId>
                                <version>${version.org.wildfly.wildfly-ejb-client-bom}</version>
                                <type>pom</type>
                                <outputDirectory>${project.build.directory}/Lib</outputDirectory>   
                            </artifactItem>
                            <artifactItem>
                                <groupId>org.wildfly</groupId>
                                <artifactId>wildfly-jms-client-bom</artifactId>
                                <version>${version.org.wildfly.wildfly-jms-client-bom}</version>
                                <type>pom</type>
                                <outputDirectory>${project.build.directory}/Lib</outputDirectory>
                            </artifactItem>                             
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>

任何线索?

2 个答案:

答案 0 :(得分:0)

使用<scope>import</scope>管理其他项目的依赖项。有关详细解决方案,请参阅Maven文档的this

答案 1 :(得分:0)

我遇到了同样的问题,整整一天都在挣扎。范围<scope>import</scope>仅适用于dependencyManagement部分,我们在这里并不需要。答案很简单,让Maven dependency:copy-dependencies plugin为您获取除pom文件之外的所有传递依赖项。

当文档状态设置为<excludeTransitive>false</excludeTransitive><excludeTypes>pom</excludeTypes>时,就可以解决问题。

还有一种方法可以在没有pom插件配置的情况下,而是在命令行上进行此操作:

mvn --batch-mode --no-transfer-progress -f /path/to/your/pom.xml dependency:copy-dependencies -DexcludeTypes=pom -DoutputDirectory=/Lib

Here's a GitHub gist with a full example。由于Maven中excludeTransitives的默认值为false,因此您的示例应该可以使用,但其中还包含pom文件。

相关问题