关于Maven的问题集锦

摘要:在使用 maven 过程中经常会出现各种问题与需求, 在解决一个一个问题过程中积累知识和经验,作为 Java 开发者,maven 是一个必备的知识,不管 Gradle 是否成为主流,短期内(5年?)maven 应该仍然是 Java 开发的主流。目前对于 maven 的学习有一本中文书 《Maven权威指南》,循序渐进的阅读,同时在遇到开发问题的时候可以在此进行总结,留作备忘。

非pom管理jar包集成打包方式

有时候在构建项目时有某些特殊需要,这些需求的 jar 包没有公开的连接和仓库,最简答的方式是直接加入依赖引用,但是我们仍希望使用 maven 进行打包,同时最终的 jar 包含所有的依赖。如果仍然使用 mvn package 不能把这些特殊的依赖加入到最终的 jar 包,只能以链接的形式存在。

参考该问题回答能够解决这个问题,主要思路就是使用插件:

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
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

然后使用如下命令构建

1
mvn clean compile assembly:single

如果加了 executionsingle 的配置,可以直接用 mvn package 打包。

该插件的使用方法及详细介绍可参见该博文