假设我在Maven项目中有以下目录布局:
src/
|-- main
| |-- bin
| | |-- run.cmd
| | `-- run.sh
| |-- etc
| | |-- common-spring.xml
| | |-- log4j.xml
| | `-- xml-spring.xml
| `-- java
| `-- com
...
我想构建一个zip文件,在解压缩时会生成如下内容:
assembly
|-- bin
| |-- run.cmd
| `-- run.sh
|-- etc
| |-- common-spring.xml
| |-- log4j.xml
| `-- xml-spring.xml
`-- lib
|-- dependency1.jar
|-- dependency2.jar
...
其中`run.xx'是可执行的shell脚本,它将调用我的主应用程序,将所有依赖项放在类路径上。
是否可以使用一些“官方”Maven插件,例如:行家组装-插件?
答案 0 :(得分:11)
我使用AppAssembler plugin来获得类似的东西。例如:
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<configuration>
<programs>
<program>
<mainClass>com.acme.MainClass</mainClass>
<name>app</name>
</program>
</programs>
</configuration>
</plugin>
</plugins>
答案 1 :(得分:5)
我已经使用maven-assembly-plugin来实现项目中类似的东西。我想在打包阶段构建一个zip文件,而不是手动调用assembly:assembly。这就是我想出的:
/src/assemble/distribution.xml:
<assembly>
<id>distribution</id>
<!-- specify the output formats -->
<formats>
<format>zip</format>
</formats>
<!-- include all runtime libraries in the /lib folder of the output file -->
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<!-- include all *.jar files in the target directory -->
<fileSet>
<directory>target</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!-- include all files in the /conf directory -->
<fileSet>
<outputDirectory></outputDirectory>
<includes>
<include>conf/**</include>
</includes>
</fileSet>
</fileSets>
</assembly>
/pom.xml
...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/assemble/distribution.xml
</descriptor>
</descriptors>
</configuration>
<!-- append assembly:assembly to the package phase -->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
...
答案 2 :(得分:1)
maven-assembly-plugin还可以通过在程序集描述符文件中包含类似下面的内容,将依赖项复制到程序集中:
<dependencySets>
<!-- Copy dependency jar files to 'lib' -->
<dependencySet>
<outputDirectory>lib</outputDirectory>
<includes>
<include>*:jar:*</include>
</includes>
</dependencySet>
</dependencySets>
答案 3 :(得分:-1)
appassembler为你生成'run.xx'文件。
如果您已经自己创建了shell脚本,则可以使用maven-assembly-plugin创建zip文件。 要收集依赖项,可以使用maven-dependency-plugin。