用Maven创建临时Zip文件的最佳实践

66
假设我需要管理一个由任意文件夹/文件结构组成的Zip存档物。在Maven中如何以最符合“Maven方式”的方式完成这项任务不是很清楚。我知道没有“zip”打包类型。这是否意味着在Maven中没有通用的生命周期来简单地将资源文件夹中的内容压缩并安装/部署到我的存储库中?我正在寻找选项,并评估每个选项如何满足我遵循Maven方式的要求。因为我不想承担违背黄金路径的明显惩罚。

可以在这里不使用classifier来完成:https://dev59.com/IILba4cB1Zd3GeqPZhaP - Adam
3个回答

76

决定你将使用哪种分类器来处理你的zip文件,为了举例,我们假设它将是sample

在你的项目中创建文件assembly/sample.xml

填写assembly/sample.xml,类似于这样:

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

将以下内容添加到您的 build 部分中的 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>
作为结果,它应该创建并安装you-project-name-VERSION-sample.zip
我建议您阅读Sonatype的Maven书中有关程序集的章节: https://books.sonatype.com/mvnref-book/reference/assemblies.html 此外,请阅读程序集格式规范:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

3
但是,在POM中使用哪种包装类型最合适呢?或者,即使没有Java源代码,您是否应该只使用默认的(Java)包装类型? - William
15
如果项目中没有Java代码,请使用<packaging>pom</packaging>。 - Alexander Pogrebnyak

4

在assembly/sample.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>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>

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

运行以下命令:mvn package -P dev -Dmaven.test.skip

这将创建包含以下内容的zip文件: xxxx.zip -lib/.jar -resources/.xml/properties -readme -start.sh


已经回答了这个问题。您没有提供任何额外的信息。 - lpratlong

0
在你的maven项目中创建一个名为"assembly"的文件夹。 在assembly文件夹中添加一个名为"zip.xml"的文件。 在"zip.xml"中添加以下代码,将你的项目内容打包成一个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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接