7

我正在尝试为我的项目创建一个可分发的 zip,其中包含几个配置文件和目录,以及我的项目的可执行 jar。在 Maven 程序集插件中,我发现了如何制作具有完全依赖关系的可执行 jar。但是,我无法弄清楚如何在 jar 制作完成后在 jar 周围创建 zip 文件。理想情况下,我想将 jar 移动到已经包含正确文件和子目录的目录,然后一次压缩整个内容。有没有办法做到这一点?

编辑:

我现在有了罐子建筑,还有一个基本的拉链。我的程序集文件如下所示:

<assembly>
   <id>financials-import-server</id>
   <formats>
      <format>zip</format>
   </formats>
   <dependencySets>
      <dependencySet>
      </dependencySet>
   </dependencySets>
    <files>
       <file>
          <source>target/import-server-1.0.0-SNAPSHOT.jar</source>
          <destName>service.jar</destName>
          <outputDirectory>/</outputDirectory>
       </file>
    </files>
</assembly>

我觉得包含我需要的其他文件很舒服,例如配置文件或 shell 脚本。我还有几个问题。如何在 zip 中创建空目录?另外,如何更改生成的文件的名称?

谢谢您的帮助!

4

1 回答 1

5

首先,使用 Maven JAR 插件创建一个可执行的 JAR

然后,配置您的程序集以包含所有需要的文件(最终您可以添加一个将启动应用程序的run.bat/run.sh文件)以及所有依赖项。

最后,将程序集创建绑定到您的包目标pom.xml

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-5</version>
      <configuration>
        <descriptors>
          <descriptor>/path/to/my-assembly.xml</descriptor>
        </descriptors>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
      ...

这样,您只需运行一个 Maven 命令mvn clean install,例如,编译您的项目,然后创建 ZIP 包。

如果我的回答不符合您的需求,请随时更新您的问题,您也可以提供您当前的assembly.xmlpom.xml...


编辑

关于您的更新:

我认为程序集不会让您创建一个空目录。一个想法是放置一个空文件(或readme.txt例如)并将目录包含在最终的 ZIP 中。例如,在我的项目中,我想要一个logs/目录,所以我的logs/项目中有一个目录,它只包含一个readme.txt文件:

<fileSets>
    <fileSet>
        <directory>../my-package/logs</directory>
        <outputDirectory>logs/</outputDirectory>
    </fileSet>
</fileSets>

对于创建的 ZIP 的名称,您可以在pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-4</version>
            <configuration>
                <descriptors>
                    <descriptor>my-assembly.xml</descriptor>
                </descriptors>
                <finalName>TheName</finalName>

如果我是正确的,程序集将使用此名称,ID在文件中添加定义assembly.xml,并使用适应指定格式的前缀。

于 2010-09-15T21:12:23.900 回答