使用 Maven 构建 spring-boot 项目时将文件复制到 jar 根目录
Copy file to jar root when building spring-boot project with Maven
我有一个 Spring 引导项目,我正在使用 mvn clean build 构建 jar 文件。
我需要将一个文件夹和一个文件复制到 META-INF 所在的 jar 的根目录。我尝试了 maven-resources-plugin 但我无法达到我的目标。
对于 war 文件,我过去使用过 maven-war-plugin,但我找不到类似的 jars。
谁能给我个主意?
谢谢。
像下面这样的东西会有帮助吗?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<includes>
<include>**/cdi/*</include>
<include>**/META-INF/*</include>
<include>*.properties</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
我使用 maven-assembly-plugin 解决了我的问题。我创建了一个程序集 zip,其中包含应用程序 jar 和一些其他资源。
此解决方案特定于使用 AWS Elastic Beanstalk 并需要实施 Procfile (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-platform.html#java-se-procfile) 的应用程序。
我可以使用 maven-antrun-plugin
和 JDK 中包含的 Jar 工具在 spring-boot-maven-plugin
的 repackage
目标之后添加文件。
更新 JAR 文件
The Jar tool provides a u option which you can use to update the contents of an existing JAR file by modifying its manifest or by adding files.
The basic command for adding files has this format:
jar uf jar-file input-file(s)
https://docs.oracle.com/javase/tutorial/deployment/jar/update.html
使用Maven-Antrun-Plugin
此命令可以使用 maven-antrun-plugin
和 exec
任务一起执行,它允许您通过 Runtime.exec(..)
.
执行命令
条目可能如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<exec executable="jar" vmlauncher="false">
<arg value="uf" />
<arg value="${project.build.directory}/myprogram.jar" />
<arg value="-C" />
<arg value="${project.build.directory}/classes" />
<arg value="org/company/app/Main.class" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
注意 -C 选项,它允许您更改不应包含在 jar 中的目录。
https://maven.apache.org/plugins/maven-antrun-plugin/usage.html
https://ant.apache.org/manual/Tasks/exec.html
使用Exec-Maven-Plugin
或者可以使用不需要安装 Ant 的 exec-maven-plugin
。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals><goal>exec</goal></goals>
<configuration>
<executable>jar</executable>
<arguments>
<argument>uf</argument>
<argument>${project.build.directory}/myprogram.jar</argument>
<argument>-C</argument>
<argument>${project.build.directory}/classes</argument>
<argument>org/company/app/Main.class</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
最终结构可能如下所示:
myprogram.jar
|-BOOT-INF/..
|-META-INF/..
|-org/springframework/boot/loader/..
|-org/company/app/Main.class
这样你就可以在 jar 打包后添加任何你想要的额外文件。
我有一个 Spring 引导项目,我正在使用 mvn clean build 构建 jar 文件。 我需要将一个文件夹和一个文件复制到 META-INF 所在的 jar 的根目录。我尝试了 maven-resources-plugin 但我无法达到我的目标。
对于 war 文件,我过去使用过 maven-war-plugin,但我找不到类似的 jars。
谁能给我个主意?
谢谢。
像下面这样的东西会有帮助吗?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<includes>
<include>**/cdi/*</include>
<include>**/META-INF/*</include>
<include>*.properties</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
我使用 maven-assembly-plugin 解决了我的问题。我创建了一个程序集 zip,其中包含应用程序 jar 和一些其他资源。 此解决方案特定于使用 AWS Elastic Beanstalk 并需要实施 Procfile (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-platform.html#java-se-procfile) 的应用程序。
我可以使用 maven-antrun-plugin
和 JDK 中包含的 Jar 工具在 spring-boot-maven-plugin
的 repackage
目标之后添加文件。
更新 JAR 文件
The Jar tool provides a u option which you can use to update the contents of an existing JAR file by modifying its manifest or by adding files.
The basic command for adding files has this format:
jar uf jar-file input-file(s)
https://docs.oracle.com/javase/tutorial/deployment/jar/update.html
使用Maven-Antrun-Plugin
此命令可以使用 maven-antrun-plugin
和 exec
任务一起执行,它允许您通过 Runtime.exec(..)
.
条目可能如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<exec executable="jar" vmlauncher="false">
<arg value="uf" />
<arg value="${project.build.directory}/myprogram.jar" />
<arg value="-C" />
<arg value="${project.build.directory}/classes" />
<arg value="org/company/app/Main.class" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
注意 -C 选项,它允许您更改不应包含在 jar 中的目录。
https://maven.apache.org/plugins/maven-antrun-plugin/usage.html
https://ant.apache.org/manual/Tasks/exec.html
使用Exec-Maven-Plugin
或者可以使用不需要安装 Ant 的 exec-maven-plugin
。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals><goal>exec</goal></goals>
<configuration>
<executable>jar</executable>
<arguments>
<argument>uf</argument>
<argument>${project.build.directory}/myprogram.jar</argument>
<argument>-C</argument>
<argument>${project.build.directory}/classes</argument>
<argument>org/company/app/Main.class</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
最终结构可能如下所示:
myprogram.jar
|-BOOT-INF/..
|-META-INF/..
|-org/springframework/boot/loader/..
|-org/company/app/Main.class
这样你就可以在 jar 打包后添加任何你想要的额外文件。