Maven Assembly 到 tar 个文件的组合
Maven Assembly to tar a combination of files
我正在使用以下汇编文件生成一个 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 文件。所以当我 untar,它应该有一个 jar 和 shell 脚本。
如果我理解得很好,你想创建一个 tar,它将有一个脚本 runConcept.sh,在根目录下你的项目的 jar,这个 jar 将包含它的依赖项你的项目代码及其在 lib 文件夹中的依赖项。
我看到(我认为)的问题是,当您想要执行您的主 jar 时,类加载器将无法找到您的 jar 中的库,然后将无法执行它。
但如果你还想这样尝试,我会这样做。 (之后你可以找到其他解决方案)
Solution number 1...
使用从插件的 jar-with-dependencies
程序集复制的程序集文件首次执行 maven-assembly-plugin
,属性 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 ^^),您只需在其中包含脚本和罐子
<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>
Solution number 2...
因为我认为解决方案 1 可能行不通,所以我会创建一个经典的 jar-with-dependencies,我将把它包含在 tar with scripts 中。
Solution number 3...
因为你想要它,所以有一个名为 One-JAR
的 Maven 插件可以处理你的 jar 的构建,然后 运行 构建你的 tar 的程序集.
我正在使用以下汇编文件生成一个 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 文件。所以当我 untar,它应该有一个 jar 和 shell 脚本。
如果我理解得很好,你想创建一个 tar,它将有一个脚本 runConcept.sh,在根目录下你的项目的 jar,这个 jar 将包含它的依赖项你的项目代码及其在 lib 文件夹中的依赖项。
我看到(我认为)的问题是,当您想要执行您的主 jar 时,类加载器将无法找到您的 jar 中的库,然后将无法执行它。
但如果你还想这样尝试,我会这样做。 (之后你可以找到其他解决方案)
Solution number 1...
使用从插件的 jar-with-dependencies
程序集复制的程序集文件首次执行 maven-assembly-plugin
,属性 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 ^^),您只需在其中包含脚本和罐子
<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>
Solution number 2...
因为我认为解决方案 1 可能行不通,所以我会创建一个经典的 jar-with-dependencies,我将把它包含在 tar with scripts 中。
Solution number 3...
因为你想要它,所以有一个名为 One-JAR
的 Maven 插件可以处理你的 jar 的构建,然后 运行 构建你的 tar 的程序集.