官网例子:http://maven.apache.org/plugins/maven-assembly-plugin/examples/index.html
基本使用
我们要求打包后,支持java -jar方式直接运行,原项目结构为
test-maven
--src\main\assembly
--assembly.xml
--src\main\bin
--start.sh
--stop.sh
--src\main\java
--com\ericsson\test\maven\App.java
--src\main\resources
--jdbc.properties
打包后项目结构
test-maven
--lib
--slf4j-api-1.7.26.jar
--bin
--start.sh
--jdbc.properties
--com\ericsson\test\maven\App.java
pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ericsson</groupId>
<artifactId>test-maven</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<name>test-maven</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<!--运行jar包时运行的主类,要求类全名 -->
<mainClass>com.ericsson.test.maven.App</mainClass>
<!-- 是否指定项目classpath下的依赖 -->
<addClasspath>true</addClasspath>
<!-- 指定依赖的时候声明前缀 -->
<classpathPrefix>./</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
</project>
assembly.xml文件
<assembly>
<id>make-assembly</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>/bin/</outputDirectory>
<excludes>
<exclude>stop*</exclude>
<exclude>**/*.txt</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<!-- 本工程不需要打成jar包 -->
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>/lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
打包后,满足预期
内容替换
- 修改start.sh文件,引入占位符
start use username: ${username}
start use password: ${password}
- 添加替换文件src/main/assembly/filter.properties
username=root
password=123456
- maven-assembly-plugin配置filter.properties文件
<configuration>
<filters>
<filter>src/main/assembly/filter.properties</filter>
</filters>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
- 将需要替换的文件filtered置为true
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>/bin/</outputDirectory>
<excludes>
<exclude>stop*</exclude>
<exclude>**/*.txt</exclude>
</excludes>
<filtered>true</filtered>
</fileSet>
- 测试,执行
mvn clean install -Dmaven.test.skip=true
,编译生成文件
- 验证,替换成功