2011-04-19 6 views
13

여기에 무지하게 들러 유감이지만 저는 Maven을 처음 접했고 정말 간단하다고 생각하는 것에 맞서 머리를 숙였습니다.Maven 어셈블리 플러그인을 시작하는 데 문제가 발생했습니다.

docs 말 :

[...] 루트 디렉토리, lib 디렉토리/디렉토리에 런타임 종속성에서 프로젝트의 JAR 이슈를 포함하는 ZIP 어셈블리를 생성 할 수있는 프로젝트 및 쉘 스크립트 독립 실행 형 응용 프로그램을 시작합니다.

정확히 내가하고 싶은 것을! 그러나 나는 그렇게 할 수 없습니다.

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.anearalone</groupId> 
    <artifactId>myapp</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    [...] 
    <build> 
     <finalName>myapp</finalName> 
     <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.2.1</version> 
     <executions> 
      <execution> 
       <id>make-assembly</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
       <configuration> 
        <descriptors> 
        <descriptor>src/main/assemble/dist.xml</descriptor> 
        </descriptors> 
        <archive> 
        <manifest> 
         <mainClass>com.anearalone.myapp.CLI</mainClass> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
        </manifest> 
        </archive> 
       </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
</build> 
[...] 
</project> 

및 참조 dist.xml는 다음과 같습니다 : 다음과 같이

내 POM은

<assembly> 
    <id>dist</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <files> 
     <file> 
     <outputDirectory>/</outputDirectory> 
     <source>src/main/bin/arkify.sh</source> 
     <fileMode>755</fileMode> 
     </file> 
    </files> 
    <dependencySets> 
     <dependencySet> 
     <useProjectArtifact>false</useProjectArtifact> 
      <includes> 
      <include>*:jar</include> 
      </includes> 
      <outputDirectory>/lib</outputDirectory> 
     </dependencySet> 
     <dependencySet> 
     <useProjectArtifact>true</useProjectArtifact> 
     <includes> 
      <include>com.anearalone:myapp:jar:0.0.1-SNAPSHOT</include> 
     </includes> 
     <outputDirectory>/</outputDirectory> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

내가 꽤 있어요하지만 이것은 (I zip 파일에서 원하는 레이아웃을 달성 내가 올바른 방법으로 거기에 도착하지 않을거야)하지만 난 target/ (하나는 압축 아카이브, 다른 하나는 루트에 있음)에 2 개의 병이 있으며 그 중 어느 것도 결과 내 MANIFEST.MF에 내 mainClass 항목을 포함하지 않습니다. 내가 올바른 수 있습니다 생각 project.packaging에 "치어"를 변경하는 경우

target/의 루트 물론 여분의 항아리 (도망 간다, 그러나 나는이 경고를 얻을 :

[WARNING] Cannot include project artifact: com.anearalone:myapp:pom:0.0.1-SNAPSHOT; it doesn't have an associated file or directory. 
[WARNING] The following patterns were never triggered in this artifact inclusion filter: 
o 'com.anearalone:myapp' 

을 .. . 실제로 내 유물이 아카이브에없는, 그리고 MANIFEST.MF에 추가하는 항목은 아직 없다.

누구나 초보자를 도울 시간이?

답변

9

내가 정확하게 문제를 이해한다면, 당신의 우편 번호가 정확한지 생성되었지만 my-app-0.0.1-SNAPSHOT (직접 target/ 디렉토리에있는 JAR는 물론) MANIFEST.MF 파일에 기본 클래스가 포함되어 있지 않습니다.

사실, assembly 플러그인은 그러한 작업을 실행하는 데 전념하지 않습니다. 이것은 the main class of your project에 나타내는 방법을 제공하는 JAR plugin의 작업입니다. 당신은 단순히 현재 pom.xml이 구성을 추가해야합니다

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    ... 
    <configuration> 
     <archive> 
     <manifest> 
      <addClasspath>true</addClasspath> 
      <mainClass>my.app.MainClass</mainClass> 
     </manifest> 
     </archive> 
    </configuration> 
    </plugin> 
</plugins> 

pom 포장 프로젝트의 포장을 변경하려면 시도에 대해서 : 그것은 나쁜 생각이었다) 사실, pom 포장 pom.xml 자체가 아닌 다른 리소스없이 프로젝트에 사용됩니다. pom.xmlthe parent of others projects 또는 aggregate multiples modules으로 정의됩니다.

+1

아, 완벽! 나는 [사용 페이지] (http://maven.apache.org/plugins/maven-assembly-plugin/usage.html)에있는 처음 몇 줄에서 이것을 추측 했어야합니다. 매우 감사합니다! – JStroop

관련 문제