2017-11-26 20 views
1

Maven 사용 프로젝트를 하나의 큰 dependecy를 제외한 모든 종속성을 포함하는 JAR로 컴파일했습니다. 종속성외부 클래스 경로로 실행 가능한 JAR 실행

<plugin> 
<artifactId>maven-assembly-plugin</artifactId> 
<version>2.2.1</version> 
<configuration> 
    <archive> 
     <manifest> 
     <mainClass>com.mypackage.Main</mainClass> 
     </manifest> 
    </archive> 
    <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
</configuration> 
<executions> 
    <execution> 
     <id>make-assembly</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
    </execution> 
</executions> 

제외가 <scope>provided</scope>

myjar.jarBigExternalJar.jar 같은 폴더에 대상으로 수행하지만, 내가하려고 할 때 실행 : 다음 dependecies의 포함을 사용하여 수행됩니다

java -cp ".:BigExternalJar.jar:myjar.jar" -jar myjar.jar 

누락 된 클래스 (해당 클래스는 BigExternalJar.jar)에 대한 예외가 발생합니다.

Maven 전용을 사용하여 의 JAR에 종속성을 팩 할 수는 있지만 클래스 패스에 추가 JAR를 추가 할 수 있습니까? BigExternalJar은 MANIFEST 파일에 수동으로 추가 할 수 없으므로 항상 같은 폴더에있는 것은 아닙니다.

중복되는 두 가지 유사한 질문이 있지만이 상황에 대한 대답이 없습니다. 당신이 -jar 옵션을 사용하는 경우 Eclipse: How to build an executable jar with external jar?Running a executable JAR with external dependencies

+0

는 사용하지 않는 포장 된 항아리에있을 것입니다 모든 외부 항아리 ~~~ 시도; :) 대신 클래스 경로 항목을 구분 하시겠습니까? –

+0

'java -cp ... com.mypackage.Main'. -jar는 다음을 의미합니다. -cp를 무시하고 manifest에 지정된 클래스 경로를 사용합니다. –

+0

@JBNizet 감사. 그렇다면 jar 파일 내부에 몇 가지 종속성을 가질 수는 없다는 결론을 내리고 결론을 내릴 것입니다. 옳은? –

답변

0

클래스 경로 인수는 무시됩니다. 매니페스트에 제공된 클래스 경로 만 사용됩니다.

0
<build> 
    <plugins> 
     <!-- compiler插件, 设定JDK版本 --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <encoding>UTF-8</encoding> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <createDependencyReducedPom>false</createDependencyReducedPom> 
         <transformers> 
          <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>xxx.xxx.yourmain</mainClass> 
          </transformer> 
          <transformer 
            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/spring.handlers</resource> 
          </transformer> 
          <transformer 
            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/spring.schemas</resource> 
          </transformer> 
         </transformers> 
         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

PLS는이