2016-10-31 2 views
1

두 개의 폴더가 포함 된 zip 파일을 만들려고합니다. 각 폴더에는 pom 내 특정 종속성의 플러그인이 포함됩니다. 현재 올바른 구조를 만들 수 있지만 예를 들어 첫 번째 종속성의 항아리가 두 번째 종속성의 항아리에 들어 가지 않도록하고 싶습니다. 다음과 같이 내 현재 치어 구조는 다음과 같습니다메이븐 어셈블리 내에서 jar의 모든 종속성 제거

<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> 
    <parent> 
     <groupId>PARENT-GROUP</groupId> 
     <artifactId>PARENT-ARTIFACT</artifactId> 
     <version>0.2.0-SNAPSHOT</version> 
    </parent> 
    <groupId>GROUP-ID</groupId> 
    <artifactId>ARTIFACT-ID</artifactId> 

    <properties> 
     <main.project>MAIN-PROJECT</main.project> 
     <plugin.version>0.0.1-SNAPSHOT</plugin.version> 
     <plugin.artifact>PLUGIN-ID</plugin.artifact> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>PLUGIN-GROUP</groupId> 
      <artifactId>${plugin.artifact}</artifactId> 
      <version>${plugin.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>SECOND-DEPENDENCY</groupId> 
      <artifactId>SECOND-ARTIFACT-ID</artifactId> 
      <version>${project.parent.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>${main.project}-${project.parent.version}</finalName> 
     <plugins> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.4</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <appendAssemblyId>false</appendAssemblyId> 
        <descriptors> 
         <descriptor>${project.basedir}/src/zip.xml</descriptor> 
        </descriptors> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

바와 같이 나는 점점 오전 치어 내에서 두 개의 종속성이 볼 수 . 내가 갖고 싶은 출력은 다음과 같은 폴더 구조입니다. main \ lib : 두 번째 종속성 jar가 포함되어 있습니다. 두 번째 종속성 jar는 모두 같은 폴더 내에 있습니다. main \ plugin \ plugin : 모든 첫 번째 종속성 (플러그인과 모든 종속성)이 포함되어 있습니다. 두 폴더 모두 첫 번째 종속성을 포함해서는 안되며 그 반대도 마찬가지입니다. 지금까지 나는 다음과 같은 조립 XML

<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>release</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/lib</outputDirectory> 
      <unpack>false</unpack> 
      <useProjectArtifact>false</useProjectArtifact> 
      <excludes> 
       <exclude> 
        *:${plugin.artifact} 
       </exclude> 
      </excludes> 
     </dependencySet> 
     <dependencySet> 
      <outputDirectory>/plugins/${plugin.artifact}-${plugin.version}/${plugin.artifact}-${plugin.version}</outputDirectory> 
      <unpack>false</unpack> 
      <useProjectArtifact>false</useProjectArtifact> 
      <excludes> 
       <exclude> 
        *:SECOND-ARTIFACT-ID 
       </exclude> 
      </excludes> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

때우기이 나는 각각의 종속성을 제외하는 더 나은 방법이 있는지 알고 싶습니다 나에게 쓰기 폴더 구조를 제공하지만, 모두의 종속성을 포함 항아리를 자동으로 하나씩 제외하는 것이 아니라 자동으로 처리합니다.

답변

1

찾고있는 다른 사람들을 솔루션으로 도울 수 있습니다. dependencySet 내에서 추가 태그 사용자 전이 필터링을 추가하고이를 true로 설정하면됩니다.

<dependencySet> 
    <outputDirectory>/lib</outputDirectory> 
    <unpack>false</unpack> 
    <useProjectArtifact>false</useProjectArtifact> 
    <useTransitiveFiltering>true</useTransitiveFiltering> 
    <excludes> 
     <exclude> 
      *:${plugin.artifact} 
     </exclude> 
    </excludes> 
</dependencySet> 

이렇게하면 excludes 종속성이 필터링되는지 확인합니다.