Maven 2 Maven-在jar中包含依赖lib而不解包依赖项?
我们正在尝试构建一个包含未打包的依赖jar的客户机jar。清单应该有Maven 2 Maven-在jar中包含依赖lib而不解包依赖项?,maven-2,maven-assembly-plugin,client-library,Maven 2,Maven Assembly Plugin,Client Library,我们正在尝试构建一个包含未打包的依赖jar的客户机jar。清单应该有类路径项指向依赖JAR。下面的代码片段可以正常工作,但是罐子已经打开了-我们如何阻止罐子被打开 <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs>
类路径
项指向依赖JAR。下面的代码片段可以正常工作,但是罐子已经打开了-我们如何阻止罐子被打开
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
maven汇编插件
带有依赖项的jar
真的
组装
包裹
单一的
实际上,使用带有依赖项的jar进行组装会导致maven解压所有依赖项,因为在相应的程序集描述符中将${assembly.dependencySets.dependency.unpack}
设置为true
一个简单的修复方法是提供一个类似于带有dependencies.xml的jar的程序集描述符,并将${assembly.dependencySets.dependency.unpack}
修改为false
,如下所示:
编辑:由于未知原因,使用false
时的行为不完全相同,似乎有必要将/
添加到文件集,否则无法获得预期结果
<assembly>
<id>uberjar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
uberjar
罐子
假的
假的
运行时
${project.build.outputDirectory}
/
Pascal Thivent提出的解决方案为Maven assembly插件定义了一个新的程序集。Maven assembly插件提供了默认的程序集,这些程序集是“bin”、“带依赖项的jar”、“project”和“src”,它们生成各种预定义的捆绑包
新的程序集必须在新的xml文件中定义,大部分时间位于src/assemble中。然后将加载它,而不是预定义的,如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<!-- disabled predefined assembly -->
<!--
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
-->
<descriptors>
<descriptor>src/assemble/myAssembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
org.apache.maven.plugins
maven汇编插件
2.2-β-5
src/assembly/myAssembly.xml
您可以将依赖项作为jar文件添加到jar中:
程序集描述符.xml
<assembly>
<id>uberjar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>.</outputDirectory>
</fileSet>
</fileSets>
</assembly>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-uberjar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptor>src/main/assemble/assembly-descriptor.xml</descriptor>
</configuration>
</execution>
</executions>
</plugin>
:
注意:类路径
头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或可通过Internet协议访问的类。要将JAR文件中的JAR文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果MyJar.jar
包含另一个名为MyUtils.jar
的jar文件,则不能使用MyJar.jar
清单中的类路径头将MyUtils.jar
中的类加载到类路径中
我还要添加false
。