J'essaie de conditionner un projet utilisant les bibliothèques OptaPlanner 6.0.1 dans un fichier .jar à l'aide de l'artefact jar d'IntelliJ IDEA, mais au lieu de mon fichier manifest.mf contenant la norme.
Manifest-Version: 1.0
Main-Class: a.b.c.app
le pot utilise celui fourni dans ecj-3.7.2.jar, une des bibliothèques de support d'OptaPlanner:
Manifest-Version: 1.0
Build-Jdk: 1.6.0_26
Built-By: ibrandt
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
Pour cette raison, un "no main manifest attribute, in appname.jar"
_ erreur se produit lorsque vous essayez d’exécuter l’application. Si je remplace manuellement le manifeste dans le fichier .jar par le mien, tout fonctionne correctement. Y a-t-il quelque chose que je puisse faire pour résoudre ce problème?
Je garde les bibliothèques dans un répertoire/lib séparé et elles ont été ajoutées à la racine de l'artefact jar en tant que répertoire extrait, IntelliJ IDEA est v13.0.1.
J'ai eu le même problème.
Assurez-vous que votre MANIFEST.MF est dans:
src/main/resources/META_INF/
NE PAS
src/main/Java/META_INF/
Comme indiqué dans le commentaire de @ grudolf dans l'une des autres réponses, une façon de procéder (et la seule qui a fonctionné pour moi dans un projet Gradle importé) consiste à créer un pot vide comme suit:
C'est définitivement un bug dans Idea. Cette réponse liée fonctionne de manière fiable lorsqu'il existe des répertoires extraits. En gros, vous trouvez votre fichier .idea/JARNAME.xml, ajoutez-y l’élément suivant au tout en haut du <root>
élément pour votre pot. Tous les éléments extraits au-dessus de votre nouvelle copie de fichier contenant un manifeste masqueront votre nouveau manifeste.
<element id="directory" name="/META-INF">
<element id="file-copy" path="$PROJECT_DIR$/modulename/src/META-INF/MANIFEST.MF" />
</element>
Pour réparer:
Si vous voulez spécifier Main Class, vous devez ajouter ce plugin à pom.xml:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<mainClass>Form</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
J'avais un problème similaire.
Le problème était dans le fichier pom.xml.
<archive>
<manifestEntries>
<Dependencies>one.jar,
two.rar,
other.jar
</Dependencies>
</manifestEntries>
</archive>
Je ne sais pas pour quelle raison ce code fonctionne dans Eclipse, mais pas dans IntelliJ
C'est correct.
<archive>
<manifestEntries>
<Dependencies>one.jar, two.rar, other.jar</Dependencies>
</manifestEntries>
</archive>
Manifest.mf a travaillé !!!
J'espère que ça aide.
Pour ne pas avoir de problème comme Manifest, vous devez avoir un répertoire nommé "META-INF" dans le répertoire "src". Donc, créez-le et mettez un fichier nommé "MANIFEST.MF" avec le contenu suivant:
Manifest-Version: 1.0
Main-Class: <packageName>.Main
Ne pas oublier de remplacer le nom du paquet contenant la classe principale ci-dessus!
Il existe plusieurs façons de générer des fichiers jar exécutables. Utiliser la fonction d'interface graphique d'IntelliJ est un bon moyen. Une autre méthode consiste à utiliser Maven (ou de manière similaire dans gradle, buildr, etc.), qui est convivial pour les serveurs de construction:
Il est plus ou moins facile à copier à partir des exemples optaplanner maven build: