2015-03-08 46 views
12

我想将JAR中的源代码与所有依赖项组合起来,并将其与其他文件一起打包到zip文件中。我能够创建一个具有所有依赖项的Jar以及ZIP文件,但是我无法将这两者结合起来。使用Maven程序集插件组合Jar与依赖项和ZIP文件

我最终要在zip文件中的目录结构如下:

装载机/斌/ shellscript.sh

装载机/ lib中/罐与 - dependencies.jar

装载机/ APPNAME /配置/ config.xml中

下面是从我的POM文件的摘录:

<plugins> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>fully.qualified.MainClass</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <descriptors> 
        <descriptor>src/main/assembly/assembly.xml</descriptor> 
       </descriptors> 
       </configuration> 
     </plugin> 

下面是我的组装

<assembly> 
    <id>bin</id> 
    <!-- Specifies that our binary distribution is a zip package --> 
    <formats> 
     <format>zip</format> 
    </formats> 

    <baseDirectory>SpreadsheetLoaderApp</baseDirectory> 

    <fileSets> 
     <fileSet> 
      <directory>corporatebondpurchases</directory> 
      <outputDirectory>${basedir}/corporatebondpurchases/config</outputDirectory> 
      <includes> 
       <include>*.xml</include> 
       <include>*.properties</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>corporatebondpurchases</directory> 
      <outputDirectory>${basedir}/bin</outputDirectory> 
      <includes> 
       <include>*.sh</include> 
      </includes> 
     </fileSet> 
    </fileSets> 
</assembly> 

这里的提取物是从构建的一部分输出:

[INFO] --- maven-assembly-plugin:2.4:single (default-cli) @ SpreadsheetLoader --- 
[INFO] Reading assembly descriptor: src/main/assembly/assembly.xml 
[INFO] Building zip: C:\Software\SpringSTS\workspace\SpreadsheetLoader\target\SpreadsheetLoader-0.0.1-SNAPSHOT-bin.zip 
[INFO] Building jar: C:\Software\SpringSTS\workspace\SpreadsheetLoader\target\SpreadsheetLoader-0.0.1-SNAPSHOT-jar-with-dependencies 

这成功地创造下一个目标一个瓶子以及ZIP文件(尽管有完整路径,而比相对路径)。我想要的是将Jar文件作为zip文件的一部分包含在内。

编辑:

研究各种博客文章之后,我已经成功通过以下POM和装配文件

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>jar-with-dependencies</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>fully.qualified.MainClass</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </execution> 
      <execution> 
       <id>dist</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
       <configuration> 
        <descriptors> 
         <descriptor>src/main/assembly/assembly.xml</descriptor> 
        </descriptors> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 

与对应汇编文件来得到这个工作...

<assembly> 
    <id>dist</id> 
    <!-- Specifies that our binary distribution is a zip package --> 
    <formats> 
     <format>zip</format> 
    </formats> 

    <includeBaseDirectory>true</includeBaseDirectory> 
    <baseDirectory>SpreadsheetLoader</baseDirectory> 

    <files> 
     <file> 
      <source>target/${project.artifactId}-${project.version}-jar-with-dependencies.jar</source> 
      <outputDirectory>lib</outputDirectory> 
     </file> 
    </files> 

    <fileSets> 
     <fileSet> 
      <directory>applicationbuild/${buildname}</directory> 
      <outputDirectory>${buildname}/config</outputDirectory> 
      <includes> 
       <include>*.xml</include> 
       <include>*.properties</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>applicationbuild/${buildname}</directory> 
      <outputDirectory>bin</outputDirectory> 
      <includes> 
       <include>*.sh</include> 
      </includes> 
      <lineEnding>unix</lineEnding> 
      <fileMode>0755</fileMode> 
     </fileSet> 
     <fileSet> 
      <directory>./</directory> 
      <outputDirectory>logs</outputDirectory> 
      <excludes> 
       <exclude>*/**</exclude> 
      </excludes> 
     </fileSet> 
     <fileSet> 
      <directory>./</directory> 
      <outputDirectory>${buildname}/sourcedata</outputDirectory> 
      <excludes> 
       <exclude>*/**</exclude> 
      </excludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

这给了我一个很好的简单目录结构用于部署目的。我的信息来源主要来自于以下站点:

http://www.drawbackz.com/stack/175442/maven-assembly-plugin-how-to-create-nested-assemblies.html

感谢

回答

4

我与上述结果开心就好。不过,这是我第一次尝试使用Maven。如果有人有更好的方式来做这件事,我很乐意听取建议。

+1

我建议您从您的问题中删减真正的答案,并将其粘贴到此帖子中并将其标记为接受的答案 – 2017-05-12 13:14:42

相关问题