Maven meilleure pratique pour créer un artefact zip ad hoc

Supposons que je dois gérer un artefact constitué d'une structure de dossier / fichier aribtrary enroulée en tant qu'archive zip. Il n'est pas clair pour moi comment accomplir cela dans Maven d'une manière qui correspond le mieux "à la manière Maven."

Je sais qu'il n'y a pas de type d'emballage "zip". Cela signifie-t-il qu'il n'y a pas de cycle de vie générique dans Maven pour simplement prendre ce que j'ai dans le dossier resources, le compresser et l'installer/le déployer dans mes dépôts?

Je cherche des options, avec les évaluations de la façon dont chaque option satisfait mon exigence de suivre la voie maven, car je ne souhaite pas encourir les sanctions évidentes de s'éloigner du chemin d'or . . .

45
demandé sur chad 2011-10-20 18:51:00

2 réponses

Décidez quel Classificateur vous utiliserez pour votre fichier zip, par souci d'argument disons que ce serait sample.

Dans votre projet, créez le fichier assembly/sample.xml

Remplissez assembly/sample.xml, avec quelque chose comme ceci:

<?xml version="1.0" encoding="UTF-8"?>
<assembly
  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
    http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
      http://maven.apache.org/xsd/assembly-1.1.2.xsd"
>
  <id>sample</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <outputDirectory>/</outputDirectory>
      <directory>some/directory/in/your/project</directory>
    </fileSet>
  </fileSets>
  <!-- use this section if you want to package dependencies -->
  <dependencySets>
    <dependencySet>
      <outputDirectory>lib</outputDirectory>
      <excludes>
        <exclude>*:pom</exclude>
      </excludes>
      <useStrictFiltering>true</useStrictFiltering>
      <useProjectArtifact>false</useProjectArtifact>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
</assembly>

Ajoutez ceci à la section build de votre pom

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <id>create-distribution</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>assembly/sample.xml</descriptor>
              </descriptors>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

Par conséquent, il devrait créer et installer you-project-name-VERSION-sample.zip.

Je vous suggère de lire le chapitre sur les assemblages du livre Maven de Sonatype: https://books.sonatype.com/mvnref-book/reference/assemblies.html

Lire aussi la spécification du format d'Assemblage: http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

59
répondu Alexander Pogrebnyak 2017-02-03 10:55:34

Remplir l'assemblage / l'échantillon.xml avec quelque chose comme ceci:

<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>install</id>
  <baseDirectory>/</baseDirectory>
  <formats>
  <format>zip</format>
</formats>
<fileSets>
  <fileSet>
    <includes>
      <include>README*</include>
      <include>*.sh</include>
    </includes>
  </fileSet>
  <fileSet>
    <directory>target/classes/</directory>
    <outputDirectory>resources</outputDirectory>
    <includes>
      <include>*.properties</include>
       <include>*.xml</include>
    </includes>
    <lineEnding>dos</lineEnding>
  </fileSet>
  <!-- 
  <fileSet>
    <directory>target/</directory>
    <outputDirectory>lib</outputDirectory>
    <includes>
      <include>*.jar</include>
    </includes>
    <lineEnding>dos</lineEnding>
  </fileSet>
   -->
</fileSets>
 <!-- use this section if you want to package dependencies -->
  <dependencySets>
    <dependencySet>
      <outputDirectory>lib</outputDirectory>
      <excludes>
        <exclude>*:pom</exclude>
      </excludes>
      <useStrictFiltering>true</useStrictFiltering>
      <useProjectArtifact>true</useProjectArtifact>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
</assembly>

Ajouter les codes ci-dessous dans pom.fichier xml.

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

Exécuter les commandes comme mvn package -P dev -Dmaven.test.skip

Va créer les fichiers zip qui incluent : xxxx.zip - lib / .pot -ressources/.xml/propriétés -Lisezmoi -start.sh

1
répondu Frank Wu 2016-11-18 02:21:30