146 votes

Est-il possible de renommer un maven jar-with-dependencies?

Je suis actuellement en utilisant le jar-with-dependencies de l'assemblée de créer un jar. Toutefois, le nom de mon pot est un peu long.

Depuis ce pot est utilisé par des programmes RPG sur un AS400, je tiens à le raccourcir pour rendre la vie un peu plus facile pour les développeurs. Mais, d'autres que par la main, je n'ai pas trouvé un moyen de renommer le pot de l'habituel project-name-version-classifier-jar-with-dependencies.jar. J'aimerais quelque chose comme project-name-version-classifier-full.jar

Est-il de toute façon de le faire sans essentiellement de copier le jar-with-dependencies assemblée descripteur et l'appel complet?

En outre, je veux continuer à avoir le pot sans le classpath assemblés stockées dans le référentiel.

J'ai besoin de deux objets. Le pot avec mon classificateur la tenue de la région dont la construction est de. Le pot avec toutes les dépendances qui comprend également la région.

project-name-version-region-full.jar et project-name-version-region.jar doivent être stockées dans le référentiel. Dans le premier exemple, le classificateur est une région pleine, dans le 2ème c'est la région. Cette dernière fonctionne.

244voto

Rich Seller Points 46052

Vous pouvez spécifier le finalName propriété de donner le pot le nom que vous voulez, et de préciser que appendAssemblyId doit être fausse pour éviter le "jar-with-dependencies" suffixe.

La configuration ci-dessous va sortir un pot appelé "test.jar"

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-4</version>
  <executions>
    <execution>
      <id>jar-with-dependencies</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>test</finalName>
        <appendAssemblyId>false</appendAssemblyId>
      </configuration>
    </execution>
  </executions>
</plugin>


Mise à jour: en fonction de vos commentaires, en utilisant le haut-descripteur ne fonctionne pas . Je crois que c'est un bug dans les versions récentes de l'assemblée-plugin - ils ont supprimé le support pour les classificateurs, mais l'id est fixe si vous utilisez un pare-descripteur, si vous vous retrouvez avec un grand daft nom.

Comme solution de contournement, vous pouvez copier l'assemblée descripteur utilisé par les jar-with-dependencies descripteur et de modifier l'id.

Cet exemple aurait pour résultat l'assemblée id ajoutés à la finalName, donc si vous avez besoin d'avoir un nom de region-full.jarvous pouvez spécifier le finalName que la région et de l'assemblée id complet. Le résultat sera un fichier dans la cible appelé region-full.jar mais, sachez qu'il sera toujours installé dans le repository Maven comme un joint d'artefact avec plein utilisée comme le classificateur. Tant que cette carte d'identité est différente de celle de l'autre assemblée, il devrait y avoir aucune collision.

Le pom de configuration devrait ressembler à ceci.

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-4</version>
  <executions>
    <execution>
      <id>jar-with-dependencies</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptors>
          <descriptor>src/main/assembly/jar-assembly.xml</descriptor>
        </descriptors>
        <finalName>region</finalName>
      </configuration>
    </execution>
  </executions>
</plugin>

et la jar-assembly.xml dans src/main/montage comme ceci:

<assembly>
  <id>full</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
    </fileSet>
  </fileSets>
</assembly>

38voto

vikingsteve Points 6357

Je pense avoir trouvé un moyen de configurer cela directement dans le pom sans avoir besoin d'un fichier jar-assembly.xml distinct.

C'est fondamentalement la même chose que la réponse de Rich, sauf que finalName est spécifié avec artifactId et version.

 <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>${project.artifactId}-${project.version}-full</finalName>
        <appendAssemblyId>false</appendAssemblyId>
        <archive>
            <manifest>
                <mainClass>com.mycompany.MyMainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-my-jar-with-dependenciess</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
 

PS c'est ma première réponse sur stackoverflow, si je faisais quelque chose de mal alors donnez-moi s'il vous plaît quelques indications, sinon j'espère que ça aide, merci!

8voto

Karl the Pagan Points 598

Merci pour les posts ici et certains creuser dans le maven docs , je suis venu avec la configuration suivante pour un one-off remballé exécutable jar assembly avec un nom personnalisé.

Dans pom.xml:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <id>exe</id>
            <phase>package</phase>
            <goals><goal>single</goal></goals>
            <configuration>
                <finalName>MyJarName</finalName>
                <attach>false</attach>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptors>
                    <descriptor>assembly.xml</descriptor>
                </descriptors>
                <archive>
                    <manifest>
                        <mainClass>karlthepagain.MyMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>

Dans assembly.xml:

<assembly>
    <id>exe</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <unpack>true</unpack>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
</assembly>

Ceci produira MyJarName.jar avec toutes ses dépendances ré-emballés dans le même pot et l'spécifiée Main-Class: karlthepagain.MyMain.

3voto

Mike Cornell Points 2661

Je vais donner la richesse d'un crédit pour me pointer dans la bonne direction, mais je voulais poster la solution qui a fonctionné pour moi en tant que Rich a été légèrement:

Mon jar-assembly.xml ressemblait ce qui a permis à l'assemblée de l'id de changement pour la région, qui a été stocké dans une propriété dans mon profil:

<assembly>
  <id>${env}-full</id>
    <formats>
      <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
      <dependencySet>
        <unpack>true</unpack>
        <scope>runtime</scope>
      </dependencySet>
    </dependencySets>
    <fileSets>
      <fileSet>
        <directory>${project.build.outputDirectory}</directory>
      </fileSet>
    </fileSets>
</assembly>

Je n'ai pas utilisé le finalName paramètre dans le maven-assembly-plugin paramètres comme ce construit mon projet avec mon project-name-version-env-full.jar nom où env-plein a été le classificateur.

Imaginez ma surprise quand j'ai appris l'assemblée xml peut être paramétré par les éléments de la construction. C'est exactement ce que je cherchais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X