2011-12-01 2 views
1

나는 비슷한 것을 시도하고 보았지만 달성하려는 내용과 완벽하게 일치하는 것은 없습니다. 나는 현재 종속성을 가진 runnable jar를 성공적으로 빌드 할 수있다. 이것은 훌륭하다. 제가하고 싶은 것은 만들어지는 실행 가능한 병을 가지고있는 디렉토리에있는 다른 파일과 zip 파일로 저를 넣어 지금Maven을 사용하여 종속성이있는 실행 가능한 jar 파일을 만들고 다른 파일과 함께 압축합니다.

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2.1</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 

       <archive> 
        <manifest> 
         <mainClass>com.main.whatever</mainClass> 
         <addClasspath>true</addClasspath> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

: 내 POM의 관련 섹션이 있습니다. zip을 만들려고 시도하는 XML 어셈블리 파일을 가리키는 다른 설명자를 추가하려고 시도했지만 위 단계에서 생성되는 JAR 파일을 찾을 수없는 종속성 문제가 있습니다. 먼저 실행할 명령을 지정하는 방법을 알 수 없습니다. 나는 높고 낮은 것을 찾았고 그것을 할 수있는 가장 좋은 방법은 무엇인지 알아낼 수 없다. 여러 모듈, 다중 플러그인 호출, 의존성 설정 등에 관한 많은 해답이있다. 나는 모범 사례와 가장 단순한 접근법을 찾고 있습니다.

감사합니다.

편집 : 다음 단순히 조립

  <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>jar-with-dependencies</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <archive> 
          <manifest> 
           <mainClass>com.jasonwjones.hyperion.jessub.Jessub</mainClass> 
           <addClasspath>true</addClasspath> 
          </manifest> 
         </archive> 

         <!-- this creates a warning during the Maven package, which I don't 
          love --> 
         <appendAssemblyId>false</appendAssemblyId> 

        </configuration> 
       </execution> 
       <execution> 
        <id>dist</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <descriptors> 
          <descriptor>src/main/assembly/dist.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

그리고 : 그래서 나는이 방법을 사용하여 내가 할 노력했다 달성 한 것으로 보인다

<assembly> 
<id>dist</id> 
<formats> 
<format>zip</format> 
</formats> 
<files> 
<file> 
    <source>target/${project.artifactId}-${project.version}.jar</source> 
    <!-- <source>target/${project.artifactId}-${project.version}-jar-with-dependencies.jar</source> --> 
    <outputDirectory>/</outputDirectory> 
</file> 
</files> 
<fileSets> 
<fileSet> 
    <directory>${project.basedir}</directory> 
    <includes> 
    <include>*.txt</include> 
    </includes> 
<outputDirectory>/</outputDirectory> 
</fileSet> 
<fileSet> 
    <directory>${project.basedir}/src/main/resources</directory> 
    <includes> 
     <include>*</include> 
    </includes> 
    <outputDirectory>/</outputDirectory> 

</fileSet> 

+0

어셈블리 XML의 내용을 추가 할 수 있습니까? 또한 플러그인 선언에서 assembly xml에 대한 참조가 누락되었습니다. 나는 네가 과거에하려고했던 일을 잘 해냈다. 위상 (패키지)도 올바르게 정의되어 있습니다. – CoolBeans

+0

솔루션을 답으로 게시하고 오히려 편집하십시오. –

+0

https://stackoverflow.com/questions/35217128/is-it-possible-to-build-a-java-project-only-once-using-eclipse-and-share/35359756#35359756 – Thanga

답변

2

다른 만들기 모듈은 실행 가능한 jar와 나머지 것들의 어셈블리를 수행하는 현재의 것에 의존한다. Maven 만트라를 기억하십시오. 모듈 당 하나의 출력 아티팩트

+0

나는 여전히 애매합니다. 모듈이 어떻게 작동하는지 (나는 그것들을 읽어야한다) ... 그러나 나는 당신의 생각을 얻기 위해 원래의 코멘트에 올릴 다른 접근법을 사용함으로써 작동하도록했다. 내가하고있는 방식이 Maveny인지 아닌지 확실하지 않다. – jwj

+0

모듈은 또 다른 maven 프로젝트 (별도의 폴더와 pom.xml)이며 실행 가능한 jar에 종속성이있다. –

관련 문제