使用Maven创建一个包含带有依赖项的可执行jar的zip文件

Zoe*_*Zoe 7 maven-2 maven-assembly-plugin

我正在尝试创建一个包含多个配置文件和目录的项目的可分发zip,以及我项目的可执行jar.在Maven程序集插件中,我发现了如何使可执行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>
Run Code Online (Sandbox Code Playgroud)

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

谢谢您的帮助!

Rom*_*las 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>
      ...
Run Code Online (Sandbox Code Playgroud)

这样,您只需要运行一个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>
Run Code Online (Sandbox Code Playgroud)

对于创建的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>
Run Code Online (Sandbox Code Playgroud)

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