Maven使用总结
Maven仓库配置
参考博客:https://www.cnblogs.com/chanshuyi/p/quick-start-of-maven-pull.html
MVN工具使用
清理项目并重新安装所有依赖
mvn clean install
-U 参数会强制更新所有 SNAPSHOT 版本的依赖
mvn clean install -U
查看项目的依赖树: mvn dependency:tree
mvn archetype
使用Maven创建新项目
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
更新项目中的依赖版本
mvn versions:use-latest-releases
解析项目的所有依赖。强制更新快照版本的依赖,确保下载最新的依赖项,此命令来自插件maven-dependency-plugin
mvn dependency:resolve -U
插件
maven-source-plugin
https://maven.apache.org/plugins/maven-source-plugin/
此插件用于生成源码jar包:mvn source:jar
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
maven-jar-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.example.MainClass</mainClass> <!-- 替换为你的主类 -->
</manifest>
</archive>
</configuration>
</plugin>
常见问题
Maven多模块构建时,需要把被依赖的模块先install到仓库吗?
在使用 Maven 进行多模块构建时,不需要手动将被依赖的模块先 install 到本地仓库。Maven 会自动处理模块之间的依赖关系。
当在父模块中运行 mvn install 或 mvn package 时,Maven 会按照模块的依赖顺序自动构建每个子模块。这意味着所有依赖的模块会在构建过程中被编译和打包,无需手动进行 install 操作。如果某个子模块依赖于其他子模块,确保它们在 pom.xml 中正确声明依赖关系即可,Maven 会处理好构建顺序。
[WARNING] The POM for org.example:xxx:jar:1.0-SNAPSHOT is missing, no dependency information available
Maven多模块,子模块单独install失败
1、需要把parent工程,也就是package是pom的那个工程先install一下;之后再install公共引入的模块,最后就可以单独编译子模块。
2、不用install,直接编译parent项目;这种方式只能在parent项目下进行,不能单独编译子模块。
Maven Wrapper
降级版本
mvn wrapper:wrapper -Dmaven=3.8.8
执行mvn相关命令时报错:
➜ mvn -v
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: D:\Develop\Java\apache-maven-3.9.6
Java version: 17.0.7, vendor: Oracle Corporation, runtime: D:\Develop\Java\JDK\oraclejdk17.0.7
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
Idea里的Terminal和本机的终端的环境变量不同
例如在Idea的终端里切到项目根目录下执行mvn -v显示的jre用的是jdk11,而使用自带的终端切到项目根目录下执行mvn -v显示的jre用的是jdk17
Missing artifact jdk.tools:jdk.tools:jar:1.7
使用Maven管理项目时,遇到提示Missing artifact jdk.tools:jdk.tools:jar:1.7。但实际上Maven仓库里并没有这个依赖。
解决办法如下:修改项目的pom.xml,在依赖中增加如下的部分。
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
调试maven插件
有的时候Maven插件执行报错,希望能调试一下
Idea可以直接调试Maven插件的执行。以maven-compiler-plugin为例,首先需要将插件的坐标以依赖的形式引入:
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
</dependency>
插件相关的类如下图所示,直接将断点打到CompilerMojo的execute方法里:

然后以Debug的方式执行插件,就可以看到打的断点已经生效了

问题解决方案
1.cannot download sources
使用Idea点开源码时

点击Download Sources后,弹出警告框

执行命令:mvn dependency:resolve -Dclassifier=sources
此命令会下载项目所有的依赖的源码
2.Idea中Maven插件无法下载
在
解决办法:将插件的坐标作为依赖放到项目依赖配置里,即<dependencies>里,然后刷新项目,重新加载maven依赖,这时就可以发现下载下来了,然后再改回来
3. 执行命令控制台乱码
Maven Runner添加VM Option:-Dfile.encoding=GBK,具体编码视操作系统编码而定

- Maven执行报错:No plugin found for prefix 'xxx'
[ERROR] No plugin found for prefix 'xxx' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/path/to/localRepository), nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public)] -> [Help 1] [ERROR]
"PKIX path building failed" and "unable to find valid certification path to requested target"
私服使用的https地址,安全证书过期或者没有,解决方案如下:
- 给使用的JDK安装可用的证书
- 使用maven命令时,添加以下参数,忽略安全检查
mvn -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
-Dmaven.wagon.http.ssl.ignore.validity.dates=true
- Dmaven.wagon.http.ssl.insecure=true - 允许放松ssl安全检查;
- Dmaven.wagon.http.ssl.allowall=true - 允许所有的X.509格式证书匹配,如果修改为false,则会执行和浏览器一致的检查;
- Dmaven.wagon.http.ssl.ignore.validity.dates=true - 忽略证书过期的问题
maven配置setting,使其忽略安全检查
<proxies>
<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>my-proxy-host</host>
<port>my-proxy-port</port>
<nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
<!-- 添加以下三个参数 -->
<sslHostConfig>
<!--指定是否信任所有证书-->
<all>true</all>
<!--指定使用的SSL协议版本-->
<sslProtocol>all</sslProtocol>
<!--指定是否启用SSL-->
<sslEnabled>true</sslEnabled>
<!--指定支持的SSL协议版本列表-->
<sslProtocols>TLSv1.2</sslProtocols>
<!--指定是否忽略证书验证-->
<ignoreCertificates>true</ignoreCertificates>
<!-- 指定是否信任自签名证书-->
<trustSelfSigned>true</trustSelfSigned>
<!-- 指定是否允许所有证书 -->
<allowAllCerts>true</allowAllCerts>
</sslHostConfig>
</proxy>
</proxies>

浙公网安备 33010602011771号