java - 具有可传递依赖项的 maven 程序集插件依赖项集

标签 java maven maven-3 maven-assembly-plugin

我不明白如何将部分依赖添加到 <dependencySet>组装中

例如,我依赖于 group:artifact1 和 group:artifact2,它们都依赖于 group:artifact0。

我创建的程序集描述符应该复制 group:artifact2 和所有依赖项。

如果在 pom.xml 中对 group:artifact1 的依赖出现在对 group:artifact2 的依赖之前,我在目标目录中只有 group:artifact2,但是如果我改变依赖关系的顺序,那么我在目标目录中有两个 Artifact 。

结果我想有两个包含不同库集的目录。

简单的例子在这里

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>                                                                                                                                                                      
    <groupId>com.kudrevatykh.stackoverflow</groupId>                                                                                                                                                        
    <artifactId>assembly-question</artifactId>                                                                                                                                                              
    <version>0.0.1-SNAPSHOT</version>                                                                                                                                                                       
    <properties>                                                                                                                                                                                            
        <spring.version>3.2.3.RELEASE</spring.version>                                                                                                                                                      
    </properties>                                                                                                                                                                                           
    <dependencies>                                                                                                                                                                                          
        <dependency>                                                                                                                                                                                        
            <groupId>org.springframework</groupId>                                                                                                                                                          
            <artifactId>spring-aop</artifactId>                                                                                                                                                             
            <version>${spring.version}</version>                                                                                                                                                            
        </dependency>                                                                                                                                                                                       
        <dependency>                                                                                                                                                                                        
            <groupId>org.springframework</groupId>                                                                                                                                                          
            <artifactId>spring-jdbc</artifactId>                                                                                                                                                            
            <version>${spring.version}</version>                                                                                                                                                            
        </dependency>                                                                                                                                                                                       
    </dependencies>                                                                                                                                                                                         
    <build>                                                                                                                                                                                                 
        <plugins>                                                                                                                                                                                           
            <plugin>                                                                                                                                                                                        
                <artifactId>maven-assembly-plugin</artifactId>                                                                                                                                              
                <version>2.4</version>                                                                                                                                                                      
                <executions>                                                                                                                                                                                
                    <execution>                                                                                                                                                                             
                        <id>install</id>                                                                                                                                                                    
                        <phase>package</phase>                                                                                                                                                              
                        <goals>                                                                                                                                                                             
                            <goal>single</goal>                                                                                                                                                             
                        </goals>                                                                                                                                                                            
                        <configuration>                                                                                                                                                                     
                            <descriptor>install.xml</descriptor>                                                                                                                                            
                        </configuration>                                                                                                                                                                    
                    </execution>                                                                                                                                                                            
                </executions>                                                                                                                                                                               
            </plugin>                                                                                                                                                                                       
        </plugins>                                                                                                                                                                                          
    </build>                                                                                                                                                                                                
</project>                                                                                                                                                                                                  

安装文件
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>install</id>                                                                                                                         
    <includeBaseDirectory>false</includeBaseDirectory>                                                                                       
    <formats>                                                                                                                                
        <format>dir</format>                                                                                                                 
    </formats>                                                                                                                               
    <dependencySets>                                                                                                                         
        <dependencySet>                                                                                                                      
            <useProjectArtifact>false</useProjectArtifact>                                                                                   
            <includes>                                                                                                                       
                <include>org.springframework:spring-jdbc:jar</include>                                                                       
            </includes>                                                                                                                      
            <useTransitiveFiltering>true</useTransitiveFiltering>                                                                            
            <outputDirectory>/</outputDirectory>                                                                                             
        </dependencySet>                                                                                                                     
    </dependencySets>                                                                                                                        
</assembly>                                                                                                                                  
mvn --version输出
Apache Maven 3.0.4 (r1232337; 2012-01-17 12:44:56+0400)
Maven home: C:\Users\akudrevatykh\bin\apache-maven-3.0.4
Java version: 1.7.0_11, vendor: Oracle Corporation
Java home: C:\Users\akudrevatykh\bin\jdk1.7.0_11\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"

最佳答案

您需要创建多个 dependencySet s,每个要创建的目录一个,然后使用 includesexcludes控制哪些依赖项进入哪个目录。

例如,如果您想要 spring-aopaop 结束目录和 spring-jdbcjdbc 结束目录,您将使用以下 dependencySet s:

<dependencySets>

  <dependencySet>
    <outputDirectory>aop</outputDirectory>
    <useProjectArtifact>false</useProjectArtifact>
    <includes>
      <include>org.springframework:spring-aop:jar</include>
    </includes>        
  </dependencySet>

  <dependencySet>
    <outputDirectory>jdbc</outputDirectory>
    <useProjectArtifact>false</useProjectArtifact>
    <includes>
      <include>org.springframework:spring-jdbc:jar</include>
    </includes>
  </dependencySet>

</dependencySets>

您需要确保引入正确的传递依赖项,可能是通过添加额外的 include s,但你明白了要点。

关于java - 具有可传递依赖项的 maven 程序集插件依赖项集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22505886/

相关文章:

java - 使用SBT下载jMonkeyEngine

java - 如何让 Maven 多模块程序集将 war 文件与 jar 文件放在单独的子目录中?

grails - 将更新的Grails 2.4.4更新到2.5.6时遇到的问题

maven - 如何使用 dependencyManagement 删除 spring boot 依赖?

java - Eclipse-Maven 复杂项目依赖关系 (ApacheJena)

java - 如何将多模块maven项目组装成一个WAR?

java - 拖放图像

java - 在java中对整数数组列表的数组列表进行排序不取决于它们的长度

java - 我想获得用户的唯一ID。我如何使用 getKey 方法获取它

java - 使用递归java的数字总和