pom打包插件需要如下 pom详解
<!-- 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>mappers/*.xml</exclude>
<exclude>*.xml</exclude>
<exclude>*.yml</exclude>
<exclude>*.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix></classpathPrefix>
<mainClass>com.tgxun.RunApp</mainClass>
</manifest>
</archive>
<!-- <outputDirectory>${project.build.directory}/${自定义software.name}</outputDirectory> -->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<!-- The configuration of the plugin -->
<configuration>
<descriptors>
<descriptor>src/main/resources/package.xml</descriptor>
</descriptors>
<!--<finalName>${project.artifactId}</finalName>-->
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
增加配置文件package.xml
<?xml version="1.0" encoding="UTF-8"?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>package</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<!-- 把项目相关的说明文件,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<!--<include>*.sql</include>-->
<include>*.bat</include>
<include>*.md</include>
<!--<include>README*</include>-->
<!--<include>LICENSE*</include>-->
<!--<include>NOTICE*</include>-->
<!--<include>build.info</include>-->
</includes>
</fileSet>
<fileSet>
<directory>${project.basedir}/src/main/resources</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>mappers/*.xml</include>
<include>*.yml</include>
<include>*.properties</include>
</includes>
</fileSet>
<!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
微服务中配置文件若有@xxx.xxx.xx@的配置没有被替换为值,那么可能是如下原因
1.profile替换在编译阶段完成,完成之后,替换好的文件放在target/classes下面;
2.使用assembly插件打包时,不能再从src/main/resources下查找文件,应该从target/classes下面查找配置文件;
那么package中 配置改变如下
<fileSet>
<directory>${project.basedir}/target/classes</directory>
<!--<directory>${project.basedir}/src/main/resources</directory>-->
<outputDirectory>/</outputDirectory>
<includes>
<include>mappers/*.xml</include>
<include>*.yml</include>
<include>*.properties</include>
</includes>
</fileSet>
如果需要将配置文件打包到某个文件夹下,需要注意:
1.项目结构中,将需要打包出来的配置文件放在叫config的文件夹下 resources/config(此步骤可以不要)
2.maven-jar-plugin的excludes 增加<exclude>config/</exclude> 排除打在jar包中(上一步若省略,此处也可省略)
3.package.xml中更改为
<fileSet>
<directory>${project.basedir}/target/classes/config</directory>
<!--<directory>${project.basedir}/src/main/resources</directory>-->
<outputDirectory>/config</outputDirectory> <!-- ${file.separator}config -->
<includes>
<!--<include>mappers/*.xml</include>-->
<include>*.yml</include>
<include>*.properties</include>
</includes>
</fileSet>
为什么要叫config文件夹而不是别的名字?
boot读取配置有一个优先级,jar包外面config目录优先级最高,主要是便于从外部修改配置,而不是改jar包中的application.yml文件。优先级如下:
- 当前目录的config目录下
- 当前目录
- classpath的config目录下
- classpath的根目录
第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下;
第二种是直接把配置文件放到jar包的同级目录;
第三种在classpath下建一个config文件夹,然后把配置文件放进去;
第四种是在classpath下直接放配置文件。
代码和依赖jar包分开打包 -- maven-dependency-plugin
<build>==<plugins>注释掉如下
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-installed</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
<type>${project.packaging}</type>
</artifactItem>
</artifactItems>
<outputDirectory>target/lib</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-lib</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<includeScope>compile</includeScope>
</configuration>
</execution>
</executions>
</plugin>
配置文件分开打包的另一种方式
归档位jar/zip/tag.gz 依然需要使用 maven-assembly-plugin
<!-- 该插件的作用是用于复制指定的文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<executions>
<execution>
<!-- 复制配置文件 -->
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>target/classes</directory>
<includes>
<include>application.properties</include>
<include>application-${active}.properties</include>
</includes>
<excludes>
<exclude>banner.txt</exclude>
<exclude>bootstrap.properties</exclude>
<exclude>log4j.properties</exclude>
<exclude>logback-spring.xml</exclude>
</excludes>
</resource>
</resources>
<outputDirectory>
${project.build.directory}/${software.name}/config
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>