Comment faire un jar exécutable à l'aide de maven?
Mon projet maven est comme ça, et j'ai un quartz.properties
fichier dans /src/main/resources
dossier comme indiqué ci-dessous
my-app
|-- pom.xml
`-- src
|-- main
| |-- java
| | `-- com
| | `-- mycompany
| | `-- app
| | `-- App.java
| `-- resources
| `-- quartz.properties
`-- test
|-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
Maintenant, je veux faire un jar exécutable à l'aide de maven pour que je puisse l'exécuter comme ce java -jar abc.jar
. Ci-dessous est mon principal code de la méthode qui fonctionne très bien dans mon ordinateur portable dans mon IDE eclipse, mais je veux le faire tourner sur ma machine ubuntu à l'aide de java -jar
commande:
public static void main(String[] args) {
StdSchedulerFactory factory = new StdSchedulerFactory();
try {
factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
Scheduler scheduler = factory.getScheduler();
scheduler.start();
} catch (SchedulerException ex) {
System.out.println("error= " + ExceptionUtils.getStackTrace(ex));
}
}
Et voici mon pom.xml
fichier à partir de maintenant. Ce que les changements que j'ai besoin d'avoir dans mon pom.xml
fichier pour faire un exécutable jar, de sorte que je peux le faire tourner avec java -jar
?
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.host.domain</groupId>
<artifactId>DataPlatform</artifactId>
<version>4.2.8-RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>abc</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
</project>
Une recherche avant de poster.
OriginalL'auteur user1950349 | 2015-09-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez configurer maven jar du plugin pour atteindre cet objectif.
Essayez d'ajouter suivant juste au-dessus de la section des dépendances:
Ici,
<addClasspath>true</addClasspath>
va ajouter au classpath entrées pour le manifeste de votre pot, tant et aussi longtemps que vous avez ces pots dans le même répertoire, votre application va s'exécuter correctement.Vous pouvez personnaliser le chemin de la bibliothèque avec, par exemple,
<classpathPrefix>lib/</classpathPrefix>
. Cela signifie que vos bibliothèques doivent être placés dans une relative/lib
répertoire.Vous pouvez également utiliser dépendance maven plugin si vous voulez copier automatiquement vos bibliothèques vers le répertoire de sortie.
maven-dependency-plugin
ainsi? J'ai dépendance sur divers autres bibliothèques open source, et à l'interne.J'ai mis à jour la réponse.
quelque chose est bizarre, j'ai essayé votre chemin et je n'ai
mvn clean install
qui a généré un fichier jar et j'ai utilisé ce fichier et il a couru et j'ai eu cette erreurjava.lang.NoClassDefFoundError
-----Exception in thread "main" java.lang.NoClassDefFoundError: org/quartz/SchedulerException at java.lang.Class.getDeclaredMethods0(Native Method)
.La seule différence est - j'ai aussi
maven-eclipse-plugin
dans mon pom.xml fichier.J'ai une dépendance maven pour QuartzScheduler dans mon pom.xml.
OriginalL'auteur Amila
En fait, vous aurez juste besoin d'ajouter
à votre en-tête, En d'autres termes:
Puis lorsque vous appelez sur la ligne de commande, assurez-vous d'inclure le nom complet de votre classe, comme ceci:
L'avantage de ceci est que vous pouvez plusieurs fichiers de classe avec
main()
méthodes qui peuvent être exécutées en une seule .fichier jar.Vous pouvez également inclure la suggestion de @Amila de sorte que vous n'avez pas à inclure le nom lors de l'exécution du pot, mais vous aurez à utiliser cette syntaxe:
OriginalL'auteur Craig
en fonction de ce mettre dans le fichier jar ou ce qui est nécessaire pour l'exécuter, il n'est probablement pas aussi facile que ça. Il y a une bonne collection ici: Comment puis-je créer un fichier exécutable JAR avec des dépendances à l'aide de Maven?
Je voudrais ajouter Spring-Boot à la liste. Ils ont créé un plugin maven pour atteindre ce y compris un chargeur de classe qui peut lire les fichiers jar à l'intérieur d'un fichier jar.
Il y a aussi le maven ombre plugin. En fonction de ce que vous faites qui pourrait bien fonctionner ou il peut obtenir lourd (si il y a signé des bocaux par exemple).
OriginalL'auteur wemu