2013-07-16 10 views
11

Ho letto molte soluzioni per creare un jar eseguibile con dipendenze (plug-in maven shade, plug-in maven, plug-in maven assembly) e tutte queste estensioni plug-in barattoli e reimballarli in un barattolo eseguibile. L'unico plugin che contiene i jar delle dipendenze scompattati nel jar eseguibile è un plugin jar, ma questo plugin aggiunge il proprio codice runner in jar eseguibile.Plugin Maven per creare un jar eseguibile con dipendenze non decompresse (jar con vasi)

C'è qualche soluzione per creare jar in questo modo:

├─executable.jar 
├──lib/ 
├───dependency1.jar 
├───dependency2.jar 
. 
. 
. 

e che la soluzione per lavorare.

+0

Avrete probabilmente bisogno di una classe-loader personalizzato per caricare le classi che sono in bundle in vasi all'interno di un archivio. Hai dato un'occhiata a [one jar] (http://one-jar.sourceforge.net/)? –

risposta

0
<plugins> 
      <plugin> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <additionalProjectnatures> 
         <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
        </additionalProjectnatures> 
        <additionalBuildcommands> 
         <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
        </additionalBuildcommands> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>true</downloadJavadocs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <compilerArgument>-Xlint:all</compilerArgument> 
        <showWarnings>true</showWarnings> 
        <showDeprecation>true</showDeprecation> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>1.2.1</version> 
       <configuration> 
        <mainClass>org.test.int1.Main</mainClass> 
       </configuration> 
      </plugin> 
     </plugins> 
+0

puoi aggiungerlo nel tuo pom.xml. dopo questo puoi ottenere il jar eseguibile – Ritesh

1

Il modo più comune è quello di utilizzare plug-in assemblea che vi permetterà di configurare confezionamento in un modo è necessario

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <archive> 
       <manifest> 
        <mainClass>com.somewhere.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> 
</plugin> 

Inoltre è possibile specificare descrittore di assemblaggio per la configurazione

<configuration> 
    <appendAssemblyId>false</appendAssemblyId> 
    <descriptors> 
     <descriptor>src/main/assembly/assembly.xml</descriptor> 
    </descriptors> 
</configuration> 

E assembly.xml stesso

<assembly> 
    <id>assembly</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
    </fileSets> 
</assembly> 

descrittore Assemblea può anche contenere sezione dipendenza:

<!-- lib --> 
<dependencySets> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
    </dependencySet> 
</dependencySets> 

Per quanto ho capito che stai cercando l'ultimo. Come include solo i file jar nell'assembly senza alcuna modifica. Quindi la soluzione finale sarà simile:

<assembly> 
    <id>assembly</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <!-- lib --> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>lib</outputDirectory> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

e pom parte:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <descriptors> 
      <descriptor>src/main/assembly/assembly.xml</descriptor> 
     </descriptors> 
    </configuration> 
    <executions> 
      <execution> 
       <id>make-assembly</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
     </execution> 
    </executions> 
</plugin>