使用 Maven 生成的 jar 和 dependencyis 以及其他一些文件创建一个 tar
Create a tar with maven generated jar with dependenceis and few other files
我是 Maven 的新手,它的学习主题很有趣。
成功创建带有依赖项的jar,使用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</configuration>
</plugin>
现在,我必须将几个 shell 脚本和生成的 jar 添加到 tar。
为此,我尝试了以下方法:
添加了
<descriptors>
<descriptor>hadoop-job.xml</descriptor>
</descriptors>
到上面的脚本。
在 hadoop-job.xml 中,我将需要的文件包含到 tar 中。
问题是 tar 首先生成,并说在 target 中找不到 *.jar。
有没有一种方法可以先安排 jar 创建,然后安排 tar,因为这两种配置都位于程序集插件中。
要么
是否有命令先执行并生成一个 jar,然后再生成一个命令 tar ?
顺便说一句,我正在执行 mvn clean assembly:assembly -Dbinary=true。
帮我解决。谢谢
这是一个组装构建 jar-with-dependencies 的示例,然后是一个 tar,其中包括这个 jar-with-dependencies(之前由 maven-assembly-plugin 构建)。在 tar 中,我还包括文件夹 src/main/bin
.
中 .sh
中的 shell 脚本文件
一、插件配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorId>jar-with-dependencies</descriptorId>
</descriptorRefs>
</configuration>
</execution>
<execution>
<id>all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/assembly/all.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
<configuration>
<outputDirectory>${project.build.directory}/assembly/</outputDirectory>
</configuration>
</plugin>
执行顺序很重要 因为如果我想将 jar-with-dependencies 包含到我的 tar 我需要先构建它。
我将所有程序集放在同一个文件夹中,这就是为什么我在 executions
的 configuration
标签之外还有一个全局 configuration
标签
然后是我的汇编文件内容 all.xml :
<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>all</id>
<formats>
<format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory></outputDirectory>
<includes>
<include>**/*.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>755</fileMode>
</fileSet>
</fileSets>
</assembly>
这里的includeBaseDirectory
是为了避免我的tar包含带有项目名称和版本的根文件夹。
如果您不指定 outputDirectory
标签,您的存档中的文件夹结构将从项目的根目录开始,例如,它将包含路径为 target/your-project-1.0-SNAPSHOT.jar
的 jar。
编辑:我之前做的插件配置可以简化为以下内容:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorId>jar-with-dependencies</descriptorId>
<descriptors>
<descriptor>src/assembly/all.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
<configuration>
<outputDirectory>${project.build.directory}/assembly/</outputDirectory>
</configuration>
</plugin>
原因是因为在 maven-assembly-plugin
中,descriptorId
在 descriptors
之前被读取,所以这对我们的情况有好处,但如果不是,我们将需要两次执行关心订单。
对于 descriptors
的顺序也必须注意,它们是按阅读顺序执行的(这看起来很合乎逻辑,但我认为指出它可能会有用)。
我是 Maven 的新手,它的学习主题很有趣。 成功创建带有依赖项的jar,使用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</configuration>
</plugin>
现在,我必须将几个 shell 脚本和生成的 jar 添加到 tar。 为此,我尝试了以下方法: 添加了
<descriptors>
<descriptor>hadoop-job.xml</descriptor>
</descriptors>
到上面的脚本。
在 hadoop-job.xml 中,我将需要的文件包含到 tar 中。
问题是 tar 首先生成,并说在 target 中找不到 *.jar。 有没有一种方法可以先安排 jar 创建,然后安排 tar,因为这两种配置都位于程序集插件中。 要么 是否有命令先执行并生成一个 jar,然后再生成一个命令 tar ?
顺便说一句,我正在执行 mvn clean assembly:assembly -Dbinary=true。 帮我解决。谢谢
这是一个组装构建 jar-with-dependencies 的示例,然后是一个 tar,其中包括这个 jar-with-dependencies(之前由 maven-assembly-plugin 构建)。在 tar 中,我还包括文件夹 src/main/bin
.
.sh
中的 shell 脚本文件
一、插件配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorId>jar-with-dependencies</descriptorId>
</descriptorRefs>
</configuration>
</execution>
<execution>
<id>all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/assembly/all.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
<configuration>
<outputDirectory>${project.build.directory}/assembly/</outputDirectory>
</configuration>
</plugin>
执行顺序很重要 因为如果我想将 jar-with-dependencies 包含到我的 tar 我需要先构建它。
我将所有程序集放在同一个文件夹中,这就是为什么我在 executions
configuration
标签之外还有一个全局 configuration
标签
然后是我的汇编文件内容 all.xml :
<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>all</id>
<formats>
<format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory></outputDirectory>
<includes>
<include>**/*.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>755</fileMode>
</fileSet>
</fileSets>
</assembly>
这里的includeBaseDirectory
是为了避免我的tar包含带有项目名称和版本的根文件夹。
如果您不指定 outputDirectory
标签,您的存档中的文件夹结构将从项目的根目录开始,例如,它将包含路径为 target/your-project-1.0-SNAPSHOT.jar
的 jar。
编辑:我之前做的插件配置可以简化为以下内容:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorId>jar-with-dependencies</descriptorId>
<descriptors>
<descriptor>src/assembly/all.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
<configuration>
<outputDirectory>${project.build.directory}/assembly/</outputDirectory>
</configuration>
</plugin>
原因是因为在 maven-assembly-plugin
中,descriptorId
在 descriptors
之前被读取,所以这对我们的情况有好处,但如果不是,我们将需要两次执行关心订单。
对于 descriptors
的顺序也必须注意,它们是按阅读顺序执行的(这看起来很合乎逻辑,但我认为指出它可能会有用)。