Avec Maven, Comment puis-je construire un distribuable qui a le pot de mon projet et tous les pots dépendants?

j'ai un projet (de type 'jar') c'est (évidemment) construit un bocal. Mais ce projet a de nombreuses dépendances. J'aimerais que Maven construise un "paquet" ou un "assemblage" qui contient mon bocal, tous les pots dépendants, et quelques scripts (pour lancer l'application, etc.)

Quelle est la meilleure façon de procéder? Plus précisément, quelle est la meilleure façon d'obtenir les personnes à charge dans l'assemblée?

25
demandé sur skaffman 2009-11-24 23:36:21
la source

3 ответов

pour un seul module, j'utiliserais un assemblage ressemblant à celui-ci (src/assembly/bin.xml):

<assembly>
  <id>bin</id>
  <formats>
    <format>tar.gz</format>
    <format>tar.bz2</format>
    <format>zip</format>
  </formats>
  <dependencySets>
    <dependencySet>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <outputDirectory>lib</outputDirectory>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>src/main/command</directory>
      <outputDirectory>bin</outputDirectory>
      <includes>
        <include>*.sh</include>
        <include>*.bat</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

pour utiliser cet assemblage, ajoutez la configuration suivante à votre pom.xml:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <descriptors>
        <descriptor>src/assembly/bin.xml</descriptor>
      </descriptors>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

dans cet exemple, les scripts start/stop situés sous src/main/command et sont regroupés dans bin, les dépendances sont regroupés dans lib. Personnaliser en fonction de vos besoins.

25
répondu Pascal Thivent 2015-09-25 16:55:44
la source

Voici ma solution pour créer un distribuables .zip (ou .tar.gz/.tar.bz2), y compris toutes les dépendances dans un lib dossier. Il permettra de:

  1. Créer un jar avec un manifeste incluant les dépendances de lib répertoire comme classpath et la classe principale à exécuter lors de l'exécution du jar.
  2. copier tous les bocaux dépendants sur le target/lib répertoire.
  3. créer le zip distribuable avec le pot principal et tous les pots dépendants de le répertoire lib.

Extrait de pom.xml:

<!-- create distributable -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>full.path.to.MainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>attached</goal>
            </goals>
            <configuration>
                <descriptors>
                    <descriptor>src/main/resources/dist.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

dist.xml:

<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>bin</id>
    <formats>
        <format>zip</format>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README*</include>
                <include>LICENSE*</include>
                <include>NOTICE*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/lib</directory>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/site</directory>
            <outputDirectory>docs</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

dist.xml est dérivé du bin descripteur format ici: http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#bin

6
répondu Kai Stapel 2013-04-03 13:34:44
la source

j'ai utilisé le plugin Maven assembly pour tout empaqueter dans un seul bocal. vous pouvez trouver des infos ici http://maven.apache.org/plugins/maven-assembly-plugin/ http://maven.apache.org/plugins/maven-assembly-plugin/usage.html

HTH.

1
répondu nayakam 2009-11-25 00:16:21
la source

Autres questions sur