maven créer zip jar et des fichiers supplémentaires
Je ne comprends pas maven. Mieux utiliser ant, mais... j'ai réussi à créer pot (avec ou sans dépendances), j'ai réussi à copier bat coureur script fermer les bocaux, mais maintenant je veux créer des zip avec ce pot et cette chauve-souris. Donc j'utilise de l'assemblée plugin et obtenez BUUUM!!!! CADAAAM! Dans ma configuration, il arrive donc qu'il s'exécute en parallèle pot de l'emballage. J'ai écrit assemblée fichier:
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>jg</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/classes</directory>
<outputDirectory>/123</outputDirectory>
<excludes>
<exclude>assembly/**</exclude>
<exclude>runners/**</exclude>
</excludes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
Ensuite, j'ai lié maven-assembly-plugin:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<inherited>false</inherited>
<configuration>
<archive>
<manifest>
<mainClass>by.dev.madhead.lzwj.Main</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
<descriptors>
<descriptor>src/main/resources/assembly/assembly.xml</descriptor>
<!-- <descriptorRef>jar-with-dependencies</descriptorRef> -->
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
Maintenant je obtenir ce ./target
:
- coureur.chauve-souris
- jar_without_dependencies.jar (c'est à partir de maven-jar-plugin, non?)
- jar_without_dependencies.jar
Et le troisième m'irrite. Il contient:
Et le 123 répertoire contient:
Comme vous le voyez, je reçois pot avec déballé dépendances, EXCLUS DIRS!!!!, et avec dir 123, qui est en fait ce que je veux (Oh! assemblée plugin fait que!!!).
Je veux obtenir un bocal avec des dépendances et de corriger manifeste avec classpath. En option je veux pot avec déballé dépendances (je sais à propos de <unpack>false</unpack>
dans l'assemblée, mais ne peut pas le faire fonctionner). Je veux changer /123 /et obtenir NORMALE POT SANS les FICHIERS EXCLUS!!! J'en veux deux tâches distinctes pour construire jar ou zip (c'est fait avec des profils de maven??) Comme des fourmis, j'aurais écrit quelque chose comme ceci:
<target name="jar_with_deps" depends-on="compile">
<jar>
here i copy classes (excluding some dirs with runner script), and build manifest
</jar>
<copy>
copy bat file from src/main/resources/runner/runner.bat
</copy>
</target>
<target name="zip" depends-on="jar_with_deps">
<zip>
Get jar from previous target, get runner.bat. Put them in zip
</zip>
</target>
Excusez-moi, si je suis trop expressif, mais je suis vraiment en colère contre ce implicites de comportement. Je suis vraiment coincé avec ce.
Essayé de supprimer <packaging>pot</emballage>. Ne fonctionne pas, que le pot est par défaut de l'emballage...
Ok, obtenu jar-with-dependencies travail. Mais encore besoin de personnalisation.
Plutôt que d'écrire un shitload ce que vous avez fait, écrire précisément ce que vous voulez atteindre. J'aimerais aider, mais j'ai arrêté de lire après le premier alinéa, parce que vous avez écrit trop de hors-sujet.
Je veux deux "tâches": créer un jar avec dépendances et de générer des zip avec elle + bat fichier de ressources. Deuxièmement, la "tâche", doit dépendre de la première.
OriginalL'auteur madhead | 2011-11-26
Vous devez vous connecter pour publier un commentaire.
Vous avez des options pour atteindre votre objectif:
En fonction de la taille et de la structure de votre projet, je voudrais aller de façon sécuritaire: l'option 2. C'est la garantie d'avoir le bon build et de la dep de l'ordre. Option 1 viole le maven façon quelque peu.
L'ordre est le même que celui défini dans le pom. Fixez le deuxième artefact et ce pot est inclus en tant que bien. Voir le
useProjectAttachments
l'attribut.OriginalL'auteur Michael-O
Juste au cas où il aide à quelqu'un d'autre, j'ai trouvé que c'était assez facile à faire, au moins pour mes besoins de base. J'étais déjà en utilisant le Maven Ombre plugin pour construire un bocal avec toutes les dépendances inclus:
Alors, quand j'ai couru
mvn package
, il serait de produire des target/MyApp-version.jar alors que je voulais un MyApp-version.zip contenant MyApp-version.jar le long de avec d'autres fichiers (un fichier README, etc.). Donc, j'ai ajouter de l'Assemblée plugin:Le bloc ci-dessus se réfère à
assembly.xml
, qui configure le moyen le plugin fonctionne:(
${app.version}
est définie dans le pom.xml<properties>
élément.)Ça y est, maintenant
mvn package
produit à la fois le bocal et le zip.OriginalL'auteur alexantd
J'ai fait deux profils en pom.xml:
Maintenant, je suis capable de créer pot simple (
mvn clean package
), un bocal avec des dépendances (mvn clean package -Pjar-with-dependencies
). Je peux aussi appelermvn package -Pdistro
pour créer des zip. Mais j'ai besoin d'appeler avec maven -Pjar-avec-les dépendances avant de la main. Sauf cela, tout est ok.OriginalL'auteur madhead