我正在使用以下程序集文件生成一个jar文件:
<assembly>
<id>job</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<outputDirectory>lib</outputDirectory>
<excludes>
<exclude>${groupId}:${artifactId}</exclude>
</excludes>
</dependencySet>
<dependencySet>
<outputDirectory></outputDirectory>
<unpack>true</unpack>
<includes>
<include>${groupId}:${artifactId}</include>
</includes>
</dependencySet>
</dependencySets>
</assembly>
我尝试将以下内容添加到扩展名中,并将格式字段更改为jar中的tar。它只是创建了一个tar而不是jar,这是没用的。
<files>
<file>
<source>${project.basedir}/runConcept.sh</source>
<outputDirectory></outputDirectory>
<filtered>true</filtered>
<fileMode>0755</fileMode>
<lineEnding>unix</lineEnding>
</file>
</files>
如何使用jar和shell脚本准备tar文件。因此,当我解开时,它应该有一个jar和shell脚本。
答案 0 :(得分:0)
如果我理解得很好,你想创建一个tar,它会在你的项目的根目录下有一个脚本runConcept.sh,而这个jar会包含你的项目代码及其依赖项在lib文件夹中的依赖关系。
我看到(我认为)的问题是,当你想要执行你的主jar时,类加载器将无法在你的jar中找到库然后将无法执行它。
但如果你仍然想以这种方式尝试,这就是我要做的。 (之后你可以找到其他解决方案)
解决方案编号1 ......
使用从插件的maven-assembly-plugin
程序集中复制的程序集文件首次执行jar-with-dependencies
,并将属性unpack
设置为 false outputDirectory
设置到我想要的位置,例如:
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>jar-with-dependencies-packed</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
再次执行将在前一个之后执行的maven-assembly-plugin
(否则我们将无法包含jar ^^),您只需要包含脚本和jar < / p>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>job</id>
<formats>
<format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<file>
<source>src/main/scripts/runConcept.sh</source>
<outputDirectory></outputDirectory>
<filtered>true</filtered>
<fileMode>0755</fileMode>
<lineEnding>unix</lineEnding>
</file>
</files>
<fileSets>
<fileSet>
<directory>${project.build.directory}/assembly-test/</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
解决方案编号2 ......
由于我认为1号解决方案可能不起作用,我会创建一个经典的jar-with-dependencies,我将在tar中包含脚本。
解决方案编号3 ......
因为你需要它,所以有一个名为One-JAR
的maven插件,它可以处理jar内部jar的构建,然后运行程序集来构建你的tar。