指定 Java 版本
以 Java 17 为例:
1
2
3
4
5
|
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
|
或者按如下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
|
打包文件输出到指定目录
Jar
可使用如下配置打包 Maven 工程,并将 jar 输出到指定目录下(以下示例为 bin/)。
关键节点是 outputDirectory,其他节点(如 archive)可删除。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<outputDirectory>${project.build.directory}/bin</outputDirectory>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>xxx.xxx.xxx</mainClass>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
<excludes>
<exclude>**/*.yml</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
|
Spring Boot 工程可使用如下方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/bin</outputDirectory>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
|
项目依赖
可通过如下配置,将项目依赖在打包时输出到指定目录。(以下示例为 bin/lib)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>copy-dependencies-prod</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/bin/lib</outputDirectory>
<type>jar</type>
<includeTypes>jar</includeTypes>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
|
其他资源
打包时如果需要一同输出其他文件(如启动 shell 脚本、yml 配置文件等)到指定目录,可参考如下配置:(以下示例为 bin/)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-shell-prod</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/bin</outputDirectory>
<resources>
<resource>
<directory>${basedir}/shell</directory>
<includes>
<include>*.sh</include>
</includes>
</resource>
<!-- 可以使用以下方式将 Jar 输出到指定目录 -->
<resource>
<directory>${project.build.directory}/bin</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-config-prod</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/bin/config</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>application-prod.yml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
|
本地 Jar 注册
当你有一个 Jar 文件想注册到本地仓库,可以使用如下命令:
1
|
mvn install:install-file -Dfile=文件地址 -DgroupId=GroupId -DartifactId=ArtifactId -Dversion=Version -Dpackaging=jar
|
其中 文件地址、GroupId、ArtifactId、Version 按实际情况填写即可。
HTTP 仓库报错问题
Maven 升级到 3.8.1 版本以后,默认将非 HTTPS 的远程仓库屏蔽掉了。可以通过如下方案解决:
- 将 Maven 版本降到 3.8.1 以下(如 3.6.3)
- 配置远程仓库支持 HTTPS 访问
package、install、deploy 的区别
打包一般使用如下三种命令:
mvn clean package:将项目打成 Jar 或 War 或其他形式的包
mvn clean install:在 package 的基础上,将生成的 Jar 包注册到本地仓库
mvn clean deploy:在 install 的基础上,将生成的 Jar 包推送到指定的远程仓库
其中 clean 为清空当前 target 目录。