2014-03-19 2 views
1

나는 그룹에 대한 종속성이 예를 들어 조립받는다는는

<dependencySet>에 의존성의 일부를 추가하는 방법을 이해하지 않습니다.

그룹 : artifact2를 모든 종속성과 함께 복사해야하는 어셈블리 설명자를 만듭니다.

그룹 : artifact2에 의존하기 전에 pom.xml의 artifact1에 대한 종속성이 나타나는 경우 대상 그룹에 artifact2 그룹 만 있습니다. 그러나 종속성 순서를 변경하면 대상 디렉토리에 아티팩트가 모두 존재합니다.

결과 결과가 서로 다른 라이브러리 세트가있는 두 개의 디렉토리가 필요합니다.

여기

간단한 예를

의 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>                                                 

INSTALL.XML

<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" 
+0

성취하고자하는 것을 더 자세히 설명 할 수 있습니까? 저에게 이상하게 보입니까? 빌드하는 동안 WARNING을 일으키는'dir'을 왜 만들고 싶습니까? – khmarbaise

+0

'dir'은 원래의 pom에서 복사되었습니다.'zip'으로 변경하면 경고가 사라지지만 결과로 생성 된 zip은 여전히 ​​모든 종속성을 포함하지 않습니다. –

+0

확인. 당신이 알고있는 것보다. – khmarbaise

답변

2

출력s, 만들려는 각 디렉토리에 하나씩 다음 includes 또는 excludes을 사용하여 어떤 종속성이 어떤 디렉토리에 있는지 제어하십시오. 당신은에 대한 재생해야합니다

<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> 

:

는 예를 들어, 다음과 같은 dependencySet의를 사용하는 것 jdbc 디렉토리에서 생을 마감하는 aop 디렉토리에 종료 spring-aopspring-jdbc를 원하는 경우 올바른 전 이적 종속성을 확실히 잡으려면 어쩌면 추가로 include을 추가해야하지만 요점은 알 수 있습니다.

+0

'dependencySets' 곱셈을 만들면 전이 적 의존성을 수동으로 설명해야합니다. 모든 전이 의존성을 매번 나열하는 것을 피하고 싶습니다. –

2

어셈블리에있는 종속성을 pom 파일의 종속성으로 정의해야합니다. 이렇게하면 빌드 순서가 Maven에 의해 자동으로 결정되고 항상 동일하게 유지됩니다.

<dependencySets> 
    <dependencySet> 
     <useProjectArtifact>false</useProjectArtifact> 
     <useTransitiveDependencies>true</useTransitiveDependencies> 
     <outputDirectory>lib</outputDirectory> 
     <unpack>false</unpack> 
     <excludes> 
     <exclude>${project.groupId}:*</exclude> 
     </excludes> 
    </dependencySet> 
</dependencySets> 

:

<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>dist-assembly</id> 

    <formats> 
     <format>zip</format> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> 

    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>false</useProjectArtifact> 
      <unpack>false</unpack> 
      <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

transivite 종속성이 다른 위치로 가자 : 은 또한 당신은 zip 파일로 모든 종속성을 패키지 것 같은 다음과 같은 설명을 제공해야 ${project.groupId}은 프로젝트 아티팩트를 제외합니다. 이 부분을 복사해야 할 때 자주 반복 할 수 있습니다.

+0

모든 종속성을 하나의 어셈블리로 이동하지 않으려합니다. 나는 그들 중 일부가 한 곳으로 가고 다른 한 곳으로 가기를 바란다. 전이 종속성은 두 번 복사해야합니다. –

+0

편집 후 : 그리고 다시 작동하지 않습니다, 제발, 원래의 게시물을주의 깊게 읽으십시오, 나는 한 곳으로 _all_ 의존성을 원하지 않습니다. 모든 전이 의존성이있는 _part_ 의존성을 원한다면 한 곳으로 가야합니다. 원래 게시물에 ' org.springframework : spring-jdbc : jar'을' org.springframework : spring-aop : jar '로 변경하면 동일한 결과가 발생합니다. 일부 전이 의존성이 없습니다. –