我有一个使用Maven 2构建的桌面Java应用程序(但是如果有帮助的话,我可以升级到Maven 3),并且具有许多开源依赖项。我现在正尝试将其打包为独立版本,以使最终用户可以使用它,而无需安装maven或其他任何工具。
我已经成功地使用maven-assembly- plugin构建了一个包含所有依赖项的jar,但这并不是我真正想要的,因为使用LGPL库时,您是要重新分发要用作单独jar的库。
我希望Maven构建一个包含我的代码的jar的zip文件,该zip文件MANIFEST.MF引用我需要的其他jar和其他jar。这似乎是标准做法,但我看不到该怎么做。
MANIFEST.MF
这是我pom的摘录
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> <compilerVersion>1.6</compilerVersion> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Dfile.encoding=UTF-8</argLine> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifest> <mainClass>com.company.widget.Main</mainClass> <packageName>com.company.widget</packageName> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.company.widget.Main</mainClass> <packageName>com.company.widget</packageName> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
编辑:基于卡尔斯的想法
创建了一个名为descriptor.xml的文件
<?xml version="1.0" encoding="UTF-8"?> <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>distribution</id> <formats> <format>zip</format> </formats> <dependencySets> <dependencySet> <scope>runtime</scope> <outputDirectory>lib</outputDirectory> <unpack>false</unpack> </dependencySet> </dependencySets> </assembly>
pom包含:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> <configuration> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> <archive> <manifest> <mainClass>com.company.widget.cmdline.Main</mainClass> <packageName>com.company.widget</packageName> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
现在维护jar并将它们全部放在lib文件夹中,包括我自己的代码
尝试创建一个自定义程序集描述符,并添加一个dependencySet,并确保您指定解包为false。
使用它作为汇编描述符,
<?xml version="1.0" encoding="UTF-8"?> <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>distribution</id> <formats> <format>zip</format> </formats> <dependencySets> <dependencySet> <scope>runtime</scope> <outputDirectory>lib</outputDirectory> <useProjectArtifact>false</useProjectArtifact> <unpack>false</unpack> </dependencySet> </dependencySets> </assembly>
将该文件存储为src / main / assembly / assembly.xml并像这样在pom.xml中更新程序集插件配置。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <id>assembly</id> <phase>package</phase> <goals> <goal>attached</goal> </goals> <configuration> <descriptor>${basedir}/src/main/assembly/assembly.xml</descriptor> </configuration> </execution> </executions> </plugin>
如果您还有其他需要,这里是汇编描述符参考
http://maven.apache.org/plugins/maven-assembly- plugin/assembly.html