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方法里:

img

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

img

问题解决方案

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,具体编码视操作系统编码而定
在这里插入图片描述

  1. 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地址,安全证书过期或者没有,解决方案如下:

  1. 给使用的JDK安装可用的证书
  2. 使用maven命令时,添加以下参数,忽略安全检查
mvn -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true 
	-Dmaven.wagon.http.ssl.ignore.validity.dates=true
  1. Dmaven.wagon.http.ssl.insecure=true - 允许放松ssl安全检查;
  2. Dmaven.wagon.http.ssl.allowall=true - 允许所有的X.509格式证书匹配,如果修改为false,则会执行和浏览器一致的检查;
  3. 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>
posted @ 2025-07-06 07:16  vonlinee  阅读(8)  评论(0)    收藏  举报