J'essaie de générer un fichier jar exécutable pour un petit projet domestique appelé "logmanager" en utilisant maven, comme ceci:
Comment puis-je créer un JAR exécutable avec des dépendances à l'aide de Maven?
J'ai ajouté l'extrait qui y est présenté au pom.xml et j'ai exécuté mvn assembly: assembly. Il génère deux fichiers jar dans logmanager / target: logmanager-0.1.0.jar et logmanager-0.1.0-jar-with-dependencies.jar. J'obtiens une erreur lorsque je double-clique sur le premier pot:
Could not find the main class: com.gorkwobble.logmanager.LogManager. Program will exit.
Une erreur légèrement différente lorsque je double-clique sur le fichier jar-with-dependencies.jar:
Failed to load Main-Class manifest attribute from: C:\EclipseProjects\logmanager\target\logmanager-0.1.0-jar-with-dependencies.jar
J'ai copié et collé le chemin et le nom de la classe, et vérifié l'orthographe dans le POM. Ma classe principale se lance bien à partir d'une configuration de lancement d'éclipse. Quelqu'un peut-il m'aider à comprendre pourquoi mon fichier jar ne s'exécute pas? Aussi, pourquoi y a-t-il deux pots pour commencer? Faites-moi savoir si vous avez besoin de plus d'informations.
Voici le plein pom.xml
, pour référence:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gorkwobble</groupId>
<artifactId>logmanager</artifactId>
<name>LogManager</name>
<version>0.1.0</version>
<description>Systematically renames specified log files on a scheduled basis. Designed to help manage MUSHClient logging and prevent long, continuous log files.</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<!-- nothing here -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.gorkwobble.logmanager.LogManager</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
<!-- Quartz scheduler -->
<dependency>
<groupId>opensymphony</groupId>
<artifactId>quartz</artifactId>
<version>1.6.3</version>
</dependency>
<!-- Quartz 1.6.0 depends on commons collections -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>
<!-- Quartz 1.6.0 depends on commons logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<!-- Quartz 1.6.0 requires JTA in non J2EE environments -->
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
<scope>runtime</scope>
</dependency>
<!-- junitx test assertions -->
<dependency>
<groupId>junit-addons</groupId>
<artifactId>junit-addons</artifactId>
<version>1.4</version>
<scope>test</scope>
</dependency>
<!-- junit dependency; FIXME: make this a separate POM -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.1</version>
</dependency>
</dependencies>
<dependencyManagement>
</dependencyManagement>
</project>
la source
La réponse de Pascal Thivent m'a aidé aussi. Mais si vous gérez vos plugins dans l'
<pluginManagement>
élément, vous devez redéfinir l'assemblage en dehors de la gestion des plugins, sinon les dépendances ne sont pas emballées dans le jar si vous exécutezmvn install
.la source
Si vous ne voulez pas exécuter l'objectif d'assemblage sur le package, vous pouvez utiliser la commande suivante:
Ici, le package est le mot-clé.
la source
Faites un clic droit sur le projet et donnez maven build, maven clean, maven generate resource et maven install.Le fichier jar sera automatiquement généré.
la source