2011-10-20 8 views
39

Supongamos que necesito administrar un artefacto que consiste en una estructura de carpeta/archivo aribtrary enrollada como un archivo zip. No tengo claro cómo lograr esto en Maven de la manera que mejor se adapte a "la manera Maven".Mejor práctica de Maven para crear un artefacto zip ad hoc

Sé que no hay ningún tipo de embalaje "zip". ¿Esto significa que no hay un ciclo de vida genérico en Maven para simplemente tomar lo que tengo en la carpeta de recursos, comprimirlo e instalarlo/implementarlo en mis repositorios?

Estoy buscando opciones, con evaluaciones de cómo cada opción satisface mis requisitos para seguir el camino de maven, ya que no deseo incurrir en las penalidades obvias de desviarme del camino dorado. . .

+0

Se puede hacer sin un 'clasificador' aquí: https://stackoverflow.com/questions/25078028/how-to-create-zip-target-instead-of-jar-in-maven – Adam

Respuesta

52

Decida qué clasificador usará para su archivo zip, para mayor argumento, digamos que sería sample.

En su proyecto de crear el archivo assembly/sample.xml

Rellene assembly/sample.xml con algo como esto:

<?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> 

añadir esto a la sección

<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> 

de su pom build Como resultado de ello se debe crear y instalar you-project-name-VERSION-sample.zip.

le sugiero que lea el capítulo del libro asambleas experto de Sonatype: https://books.sonatype.com/mvnref-book/reference/assemblies.html

También, leer especificación de formato de montaje: http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

+2

Pero qué packagin g tipo sería el más apropiado para usar en el pom? O debería usar el valor predeterminado (java) aunque no haya una fuente Java. – William

+10

@William. Si no hay un código Java asociado con el proyecto, use pom

0

Rellene el montaje/sample.xml con algo como esto:

<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> 

agregue a continuación los códigos en el archivo 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> 

ejecutar comandos como mvn package -P dev -Dmaven.test.skip

creará los archivos zip que incluyen: xxxx.zip -lib/.jar -Recursos/ .xml/propiedades -readme -start. sh

+0

Ya ha respondido la pregunta. No traes ninguna información adicional. – lpratlong

Cuestiones relacionadas