J'essaie de créer un fichier exécutable avec maven-assembly-plugin avec toutes les dépendances. Je veux les dépendances dans un répertoire/lib/dans le jar, avec le jar principal à l'extérieur, et les fichiers de configuration dans le même niveau du jar principal.Aide pour configurer classpath dans un fichier jar exécutable
Mon pom.xml est:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>org.main.Class</mainClass>
</manifest>
<manifestEntries>
<Class-Path>/ MainClass.jar</Class-Path>
</manifestEntries>
</archive>
<descriptors>
<!--Relative path to your descriptor -->
<descriptor>src/main/assembly/packagejar.xml</descriptor>
</descriptors>
</configuration>
</plugin>
Le packagejar.xml est:
<id>eval</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>MainClass.jar</include>
</includes>
</fileSet>
</fileSets>
<files>
<file>
<source>/src/main/resource/logging.properties</source>
<outputDirectory>/</outputDirectory>
</file>
<file>
<source>/src/main/resource/log4j.properties</source>
<outputDirectory>/</outputDirectory>
</file>
<file>
<source>/src/main/resource/hibernate.cfg.xml</source>
<outputDirectory>/</outputDirectory>
</file>
</files>
<dependencySets>
<dependencySet>
<outputDirectory>/lib/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
Et le fichier manifest.mf résultant est:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: German
Build-Jdk: 1.6.0_22
Main-Class: org.main.Class
Class-Path:/MainClass.jar lib/dependency1.jar lib/dependency2.jar etc...
Avec cela, je obtenir le mainclass à exécuter, mais il ne trouve jamais les jars à l'intérieur de la lib il doit fonctionner. Il me manque probablement quelque chose de basique. J'ai aussi essayé d'ajouter dans le fichier pom.xml manifestEntries un fichier lib/, lib/ .jar,/lib et/lib /.
Des idées?
Merci d'avance.
des mises à jour sur ce ?? Je suis également confronté à ce problème ou n'est-il pas possible de le faire de cette manière. – firefox784
est tombé sur ceci ... un extrait du tutoriel Java ... http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html L'en-tête de chemin de classe pointe vers des classes ou des fichiers JAR sur le réseau local, pas les fichiers JAR dans le fichier JAR ou les classes accessibles via des protocoles Internet. Pour charger des classes dans des fichiers JAR dans un fichier JAR dans le chemin d'accès aux classes, vous devez écrire du code personnalisé pour charger ces classes. Par exemple, si MyJar.jar contient un autre fichier JAR appelé MyUtils.jar, vous ne pouvez pas utiliser l'en-tête Class-Path dans le manifeste de MyJar.jar pour charger des classes dans MyUtils.jar dans le chemin d'accès aux classes. – firefox784
Merci, firefox784. Donc, je suppose que la meilleure façon de publier un fichier exécutable est avec les dépendances dans un répertoire lib en dehors de ce fichier, n'est-ce pas? – greguren