2015-06-11 13 views
10

C'è un modo per aggiungere una voce di classpath arbitraria a un manifest di file JAR usando un plugin-maven-plugin?Come impostare ulteriori voci del percorso di classe in manifest con un plugin Maven unjar?

Ho trovato il modo di configure maven-jar-plugin to do this, ma sembra che non ci sia tale opzione per il plugin onejar-maven.

Non è possibile trovare classi aggiuntive (altrimenti perché utilizzare il plug-in unjar, giusto?), Ma piuttosto per individuare un file di configurazione che deve essere esterno al JAR.

Esiste una soluzione diretta o una soluzione alternativa per questo?

risposta

5

L'utilizzo del plug-in one-jar è davvero necessario? È possibile raggiungere lo stesso obiettivo (confezionamento in un unico contenitore l'applicazione E tutte le dipendenze richieste, comprese quelle transitive, E aggiungere la configurazione per Class-Path E utilizzando un plug-in più stabile/standard) applicando il seguente approccio:

  • Configurare la voce Class-Path nel vostro vaso applicazione utilizzando il plugin Jar Maven e il approach lei ha citato nella questione
  • utilizzare il Maven Assembly Plugin di confezionare un singolo JAR incluse le dipendenze, come spiegato here, in un altro StackOverflow domanda/risposta.

Un esempio di file eseguibile di un vaso (senza utilizzare il plugin di un vaso) potrebbe essere come segue:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <!-- your further configuration here --> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.sample.MainApp</mainClass> 
         <!-- your further configuration here --> 
        </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> 
    </plugins> 
</build> 

Se avete bisogno di giocare ulteriormente con classpath e Maven, vorrei suggerire a controlla anche questa domanda here su StackOverflow.

3

Adding arbitrary manifest entries è possibile in 1.4.5:

<plugin> 
    <groupId>org.dstovall</groupId> 
    <artifactId>onejar-maven-plugin</artifactId> 
    <version>1.4.5</version> 
    <executions> 
     <execution> 
      <configuration> 
       <manifestEntries> 
        <Build-Status>Yes</Build-Status> 
       </manifestEntries> 
      </configuration> 
      <goals> 
       <goal>one-jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Il progetto onejar-maven-plugin non sembra essere in fase di sviluppo più, così si potrebbe desiderare di passare ad altre soluzioni (ad esempio maven-assembly-plugin) alla fine.


Il plug-in non è disponibile su Maven Central. Qualcun altro ne ha pubblicato una versione su Maven Central with a different group ID.

0

Ulteriori librerie possono essere aggiunte al classpath al momento del lancio. La proprietà di un jar.class.path può essere utilizzato

un jar.class.path
percorsi di classe extra da aggiungere all'ambiente di esecuzione. Utilizza il separatore di percorso indipendente dalla piattaforma '|'

Esempio: --one-jar.class.path = "./ lib/two.jar | /opt/lib/three.jar"

Fonte: http://one-jar.sourceforge.net/index.php?page=details