2010-03-25 3 views
25

"target"디렉토리 ($ {project.build.directory)의 zip 아카이브를 만들고 싶습니다. maven-assembly-plugin을 사용하는 것은 나 같은 단순한 작업 (과 조금 복잡하다 - 나는 왜 그런 작업을 위해 다른 파일, 어셈블리 디스크립터를 사용해야 만 하는가?) 과잉을 좋아하는 것 같다. 겉으로보기에 더 단순한 것을 찾을 수 없다. maven-zip-pluginhttp://repo1.maven.org/maven2 저장소에 있습니다.maven "target"디렉토리의 zip 아카이브 만들기

입력 사항이 있습니까?

답변

47

는 다음 세 가지 옵션이 있습니다 받는다는 - 조립 플러그인을 사용

  1. 을 - 받는다는 - 지퍼 플러그인이 조립 플러그인 때문에 나온 적이 zip 플러그인이하는 모든 작업을 수행 할 수 있습니다. 자세한 내용은 MNG-2243을 참조하십시오.
  2. zaven을 첨부하기 위해 maven-antrun-plugin (및 아마도 build-helper-plugin) 사용 - 예제 here (끝 부분에 어셈블리 플러그인보다 자세한 정보가 표시됨)이 있습니다.
  3. 자신 만의 플러그인 작성 - 어셈블리 플러그인이있는 경우 왜 이렇게할까요?

    <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>bin</id> 
        <baseDirectory>/</baseDirectory> 
        <formats> 
        <format>zip</format> 
        </formats> 
        <fileSets> 
        <fileSet> 
         <directory>${project.build.directory}</directory> 
        </fileSet> 
        </fileSets> 
    </assembly> 
    

    을 그리고 당신의 POM의 :

개인적으로, 난 그냥 다음 zip.xml 기술자 받는다는 - 조립 플러그인을 사용

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptors> 
     <descriptor>src/main/assembly/zip.xml</descriptor> 
    </descriptors> 
    </configuration> 
    <executions> 
    <execution> 
     <id>make-assembly</id> <!-- this is used for inheritance merges --> 
     <phase>package</phase> <!-- append to the packaging phase. --> 
     <goals> 
     <goal>single</goal> <!-- goals == mojos --> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
+0

작동하지 않습니다 - 내장 된 "bin"은 작동하지 않습니다. 익숙한. 그리고 비 내장형을 가리키는 방법을 알아낼 수 없습니다. –

+0

어셈블리 플러그인에 대해 antrun 플러그인을 사용하면 zip 내에 파일 크기가 다르게 저장되므로 이점이 있습니다.'ZipInputStream'을 사용하여 zip을 읽고 'getSize()'를 사용하는 경우 antrun에 의해 생성 된 zip으로 항목 크기를 가져오고 어셈블리로 생성 된 zip에 대해서는 -1을 반환합니다. –

11

생성 된 .zip 파일에 "특별한"요구가없는 경우 미리 정의 된 Maven 어셈블리 설명자 중 하나를 사용할 수 있습니다. 사전 정의 된 어셈블리 설명자는 자체 어셈블리 설명자를 제공하지 않고도 특정 어셈블리를 쉽고 빠르게 만들 수 있습니다. 사전 정의 된 설명자 bin을 사용하려고한다고 가정합니다. 그런 다음 POM의 build 섹션의 plugins 섹션에 다음을 추가하면됩니다. 항상 메이븐과 함께 물론

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptorRefs> 
     <descriptorRef>bin</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
</plugin> 

, 기본 구성을 넘어 뭔가를하고 싶은 경우에, 당신은 당신의 자신의 구성을 만들어야합니다,이 경우에, 그 자신의 조립 기술자를 의미한다.

사전 정의 된 설명자 목록은 here으로 기록되어 있습니다. bin 미리 정의 된 조립 기술자가 사용자의 요구에 맞게하지 않는 경우

+0

나쁘지 옵션을. 그러나 프로세스가 끝날 때 대상 디렉토리에는 exe 파일과 다른 exe 파일과 함께 디렉토리가 포함됩니다. 간단히 말해서 모든 파일을 함께 묶어두기를 원합니다. – Yaneeve

+0

기본 디스크립터가 작업 폴더의 내용과 같이 필요한 것보다 더 많이 패키지됩니다. 패키지 아래에 원하는 특정 폴더 (예 :'$ {project.build.directory}/installers')가 있지만 다른 디렉토리를 생략 하시겠습니까? 아니면 다른 목표가 있습니까? – RTBarnard

+0

$ {project.build.directory} 디렉토리에서 원하지 않는 파일과 디렉토리를 모두 삭제했으며 그 내용을 완전히 압축하려고합니다. 파스칼의 제안보다 더 좋은 제안이 없다면 그가 보여준대로 그 "중복 된"어셈블리 파일을 만들어야 할 것 같아요. – Yaneeve

관련 문제