Maven “ombré” POT est précédé de “original” dans le nom de fichier
Je suis à l'aide de la "nuance" Maven2 plugin pour construire un monolithique POT avec tous les produits Java dépendances regroupés. La section pertinente dans pom.xml
est assez simple:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-${project.version}-SHADED</finalName>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.mypackage.MyClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Cependant, les résultats sont bizarres. Il semble que les DEUX fichiers sont en fait créés par ce plugin Maven:
myartifact-1.0.0-SHADED.jar (zero bytes)
original-myartifact-1.0.0-SHADED.jar (10 MB)
Le fichier JAR avec le préfixe "original" est construit correctement, et fonctionne correctement. Je suppose que je pourrais juste le renommer en bande que préfixe, et aller sur mon petit bonhomme de chemin.
Cependant, je suis très curieux de savoir ce qui se passe ici avec le "ombre" du plugin. Il ressemble à l ' "original" fichier temporaire de l'espace de travail de type, destiné à être renommé à la fin du processus, et qu'au final le renommage n'a tout simplement pas complète. Il n'y a pas d'explication évidente pour que, si (c'est à dire permissions du système de fichiers, etc). Quelqu'un a déjà vu cela auparavant?
- Vous pourriez envisager de passer votre case à cocher pour Stewart réponse.
- Un travail autour de est de définir
<outputDirectory>/tmp</outputDirectory>
. Leoriginal-*.jar
fichier est encore écrit, mais au moins il n'est pas en voie de développement.
Vous devez vous connecter pour publier un commentaire.
Maven build étapes permettra de créer le jar
target/artifact-version.jar
.Puis l'ombre plugin fonctionne. Il renomme normalement pot à
target/original-artifact-version.jar
, et donne la ombragée JAR le nomtarget/artifact-version.jar
.Cependant, vous êtes à la configuration de l'Ombre plugin à utiliser un nom différent. Sauf si il y a une bonne raison à cela, je voudrais supprimer
<finalName>
de votre configuration, et de vivre avec ce que l'Ombre plugin veut vous donner.<finalName>
élément... alors POURQUOI OFFRIR LA<finalName>
ÉLÉMENT dans le CADRE DU SCHÉMA? C'est simplement un bug.java -jar myproj-1.0.jar
.Je sais que cette question est ancienne, mais pensé qu'il était intéressant d'ajouter les informations suivantes.
Je pense que la sortie initialement souhaitée par Steve est celle donnée sur cette page de la maven-ombre-plugin documentation.
Suivant @Stewart sur la fourniture d'un peu plus de réponse (n'en déplaise à soit :D):
La raison pour laquelle vous obtenez l'original-* mess peut être double:
Précisant
<finalName>
signifie que vous voulez un nom différent de ce que Maven vous donne par défaut (c'est à dire: la même que l'artefact du nom: artifactId-version.jar ou artifactId-version-shaded.jar). Si vous spécifiez un nom définitif, qui est le même que l'un des deux, il va essayer de revenir à l'ancien comme original-*.jar et puis l'écraser avec la nouvelle ombragée de une. Dans votre cas, vous la raconter pour faire la dernière JAR *-shaded.jar qui est déjà le cas quand il s'agit de Maven (avant qu'ils n'par défaut dans artifactId-version.jar), donc d'abord que la sauvegarde de la vieille*-shaded.jar
commeoriginal-*-shaded.jar
et puis les bugs lors de l'écriture d'octets à la nouvelle*-shaded.jar
donné l'ancien a disparu, ils semblent pour le renommer).(Ce qui était mon cas) à l'Aide de
<shadedClassifierName>
, qui modifie seulement le suffixe Maven utilise pour générer l' *-shaded.jar en combinaison avec<finalName>
peut également produire les mêmes résultats. Si vous le souhaitez, vous pouvez simplement utiliser<shadedClassifierName>
et spécifier un suffixe différent et être fait avec elle, sans avoir à spécifier<finalName>
avec l'ensemble de la chose. Dans mon cas, j'ai eu à la fois configuré, le nom de la sortie à la même chose: c'est à dire: artifactId-version-all.jar mais l'utilisation de "tous" comme Classificateur m'a ramené dans le scénario décrit dans le #1.