web-dev-qa-db-fra.com

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

Supposons que je dois gérer un artefact qui consiste en une structure de dossier/fichier aribtrary regroupée en tant qu’archive Zip. Je ne vois pas comment accomplir cela dans Maven de la manière qui convient le mieux à «la manière de 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 de ressources, le compresser et l'installer/le déployer dans mes référentiels? 

Je cherche des options, avec des évaluations de la manière dont chaque option satisfait à mon exigence de suivre la voie de la maven, car je ne souhaite pas encourir les pénalités évidentes de m'éloigner du sentier d'or. . . 

49
chad

Décidez quel classificateur vous utiliserez pour votre fichier Zip, par souci d’argumentation, supposons 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>

En conséquence, 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

Lisez également la spécification de format d’assemblage: http://maven.Apache.org/plugins/maven-Assembly-plugin/Assembly.html

62

Remplissez Assembly/sample.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>

ajoutez les codes ci-dessous dans le fichier pom.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>

lancer des commandes en tant que mvn package -P dev -Dmaven.test.skip

créera les fichiers Zip qui incluent: xxxx.Zip -lib / .jar -resources/. xml/properties -readme -start.sh

2
Frank Wu

Dans votre projet maven, créez un dossier Assembly. Ajoutez le fichier Zip.xml dans le dossier Assembly . Ajoutez le code ci-dessous dans Zip.xml pour regrouper le contenu de votre projet dans Zip.

<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>Zip</id>
<formats>
    <format>Zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
    <fileSet>
        <directory>directoryName of your project</directory>
        <outputDirectory>/</outputDirectory>
    </fileSet>
</fileSets>

0
Abhishek Jha