Java开发-Maven专题

  • 一. Maven的命令操作
  • 1. 常用maven命令总结
  • 2. 个人常用命令
  • 2. Idea 中 maven 窗口的工具解析
  • 二. 常见的 maven 问题
  • 1. 关于在 terminal 中或者 cmd 中执行 不能执行mvn 命令的问题
  • 2. 关于 idea 中拉取项目导致依赖报错的几种处理办法?
  • 3. maven聚合项目打包问题
  • 4. 项目打包指定报名
  • 5.maven 配置的 settings 细节
  • 6. Idea的右侧 maven 窗口中项目变为灰色的问题解决
  • 三. Mac 中 maven 的特别问题
  • 1. 安装
  • 2. mvn 全局命令的使用
  • 参考链接


一. Maven的命令操作

1. 常用maven命令总结

mvn -v //查看版本
mvn archetype:create //创建 Maven 项目
mvn compile //编译源代码
mvn test-compile //编译测试代码
mvn test //运行应用程序中的单元测试
mvn site //生成项目相关信息的网站
mvn package //依据项目生成 jar 文件
mvn install //在本地 Repository 中安装 jar
mvn -Dmaven.test.skip=true //忽略测试文档编译
mvn clean //清除目标目录中的生成结果
mvn clean compile //将.java类编译为.class文件
mvn clean package //进行打包
mvn clean test //执行单元测试
mvn clean deploy //部署到版本仓库
mvn clean install //使其他项目使用这个jar,会安装到maven本地仓库中
mvn archetype:generate //创建项目架构
mvn dependency:list //查看已解析依赖
mvn dependency:tree //看到依赖树
mvn dependency:analyze //查看依赖的工具
mvn help:system //从中央仓库下载文件至本地仓库
mvn help:active-profiles //查看当前激活的profiles
mvn help:all-profiles //查看所有profiles
mvn help:effective -pom //查看完整的pom信息


-am --also-make 同时构建所列模块的依赖模块;
-amd -also-make-dependents 同时构建依赖于所列模块的模块{的模块};
-pl --projects <arg> 构建制定的模块,模块间用逗号分隔;
-rf -resume-from <arg> 从指定的模块恢复反应堆。

2. 个人常用命令

#查看依赖树
mvn dependency:tree


#打包所有模块
mvn clean package -Dmaven.test.skip=true

#打包单个模块,同时打包其所依赖的模块
#启动命令在项目的根目录
#如果是项目的子子模块,那就先进入子子模块的父模块
mvn clean package -Dmaven.test.skip=true -pl 子模块名 -am

单独调试每个模块
使用命令行进入到项目模块的目录下执行 mvn 命令
1. mvn clean package查看问题
2. mvn clean install 打包到本地仓库

mvn 查看java java执行mvn命令_ide


mvn 查看java java执行mvn命令_java_02

mvn 查看java java执行mvn命令_java_03

2. Idea 中 maven 窗口的工具解析

mvn 查看java java执行mvn命令_ide_04

二. 常见的 maven 问题

1. 关于在 terminal 中或者 cmd 中执行 不能执行mvn 命令的问题

  • 要想在mvn 的命令在终端执行,系统要知道你有 maven 这个东西,否则就无法识别
  • 通过环境变量的配置,就可以让系统识别
  • 一般来说都是在 软件的bin 目录执行启动关闭等等命令
  • 所以环境变量的配置,export path=xxxxx/bin
  • (敲黑板)最后一步需要在自己的窗口使这个文件生效,
    命令: source ./.bash_profile

2. 关于 idea 中拉取项目导致依赖报错的几种处理办法?

  • jar 是否引入了,
  • jar是否可以打开
    2.1 没有打开的话,
    这时候点击 maven reload 是没用的,因为他已经存在了
    这时候很可能的原因就是 jar 下载的不完全,
    手动去自己的maven仓库,找到对应的目录,rm -rf (xxx)删除
  • 如果以上还不成功,
    原因描述:
    今天idea打开项目时,发现有个类报红,类明明存在,这个类是自己编写的类,
    而且项目能跑起来,很是奇怪。
    初步解决:
    1. 检查类路径等都没问题,
    2. maven——>reimport
    试过都没有用
    最后解决:
  1. pom.xml 文件注释依赖
  2. 点击 invalidate Caches/Restart…
  3. 删除本地库的依赖
  4. idea重新启动后继续maven reload 一下

3. maven聚合项目打包问题


出现unable to find a main class问题,主要是由于聚合项目的公共模块common模块,不需要主启动类 解决方法: 删除自身模块的中 spring-boot-maven-plugin插件

mvn 查看java java执行mvn命令_xml_05

4. 项目打包指定报名

#maven 的新版本都是${project.artifactId}
#此处也可以写固定字符串作为打包的名称
<build>
    <finalName>${project.artifactId}</finalName>
</build>

打包出现以下问题,是 maven 的旧版本的问题

mvn 查看java java执行mvn命令_java_06

mvn 查看java java执行mvn命令_ide_07

5.maven 配置的 settings 细节

如果用户范围的settings.xml和安装路径下的settings.xml内容不一样的话,maven在工作的时候会合并这两个settings.xml,而且用户范围的优先

  • maven的settings.xml文件里面有proxy、server、repository、mirror的配置,在配置仓库地址的时候容易混淆
  • proxy是服务器不能直接访问外网时需要设置的代理服务,不常用
  • server是服务器要打包上传到私服时,设置私服的鉴权信息
  • repository是服务器下载jar包的仓库地址
  • mirror是用于替代仓库地址的镜像地址

配置总结:
1、在mirrorOf与repositoryId相同的时候优先是使用mirror的地址
2、mirrorOf等于的时候覆盖所有repository配置
3、存在多个mirror配置的时候mirrorOf等于
放到最后
4、只配置mirrorOf为central的时候可以不用配置repository
ps: 下面的配置是先阿里云下载,然后公司私服下载

# 以下是个人配置 maven 的 settings

<?xml version="1.0" encoding="UTF-8"?>


<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  -->
    <localRepository>/Applications/software/maven_repository_wyh</localRepository>
  

  <!-- interactiveMode
   | This will determine whether maven prompts you when it needs input. If set to false,
   | maven will use a sensible default value, perhaps based on some other setting, for
   | the parameter in question.
   |
   | Default: true
  <interactiveMode>true</interactiveMode>
  -->

  <!-- offline
   | Determines whether maven should attempt to connect to the network when executing a build.
   | This will have an effect on artifact downloads, artifact deployment, and others.
   |
   | Default: false
   如果不想每次编译,都去查找远程中心库,那就设置为true。当然前提是你已经下载了必须的依赖包。 默认false。
  <offline>false</offline>
  -->

  <!-- pluginGroups
   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
   |-->
    <pluginGroups>
    <!-- pluginGroup
     | Specifies a further group identifier to use for plugin lookup.
    <pluginGroup>com.your.plugins</pluginGroup>
    -->
    </pluginGroups>

      <!-- proxies
       | This is a list of proxies which can be used on this machine to connect to the network.
       | Unless otherwise specified (by system property or command-line switch), the first proxy
       | specification in this list marked as active will be used.
       |-->
    <proxies>
        <!-- proxy
         | Specification for one proxy, to be used in connecting to the network.
         |
        <proxy>
          <id>optional</id>
          <active>true</active>
          <protocol>http</protocol>
          <username>proxyuser</username>
          <password>proxypass</password>
          <host>proxy.host.net</host>
          <port>80</port>
          <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
        </proxy>
        -->
    </proxies>


    <servers>
    
        <server> 
            <id>Snapshots</id>
            <username>admin</username>
            <password>******</password>
        </server>
        <server>
            <id>Releases</id>
            <username>admin</username>
            <password>******</password>
        </server>
    </servers>

    <mirrors>
		<!-- 使用阿里云的镜像作为central中央仓库 -->
        <mirror>
            <id>aliyun</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>        
        </mirror>
        
        <!--  作为私服,mirrorOf配置为*来提供中央仓库中不存在的jar包 -->
        <!--  最后一个mirror 的 mirrorOf 为* -->
        <mirror>
            <id>yinqihui</id>
            <mirrorOf>*</mirrorOf>
            <name>yinqihui nexus mirror</name>
            <url>http://maven.yinqihui.net.cn:0000/repository/maven-public/</url>
        </mirror>
        
    </mirrors>


    <profiles>
        <!-- 全局JDK1.8配置,配置Maven默认使用jdk1.8编译项目 -->
        <profile>  
          <id>jdk-1.8</id>  
            <activation>  
                <activeByDefault>true</activeByDefault>  
                <jdk>1.8</jdk>  
            </activation>  
            <properties>  
              <maven.compiler.source>1.8</maven.compiler.source>  
              <maven.compiler.target>1.8</maven.compiler.target>  
              <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
          </properties>  
        </profile> 

        <!-- 银企汇私服 -->
        <profile>  
            <id>yinqihui</id>
            <repositories>  
                <repository>  
                    <id>yinqihui</id> 
                    <name>yinqihui maven</name>
                    <url>http://maven.yinqihui.net.cn:0000/repository/maven-public/</url>
                    <releases>  
                        <enabled>true</enabled>  
                    </releases>  
                    <snapshots>  
                        <enabled>true</enabled>  
                    </snapshots>  
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>yinqihui</id>
                    <name>yinqihui maven</name>
                    <url>http://maven.yinqihui.net.cn:0000/repository/maven-public/</url>
                </pluginRepository>
            </pluginRepositories>  
        </profile>

        <!-- 阿里云配置: 提高国内的jar包下载速度 -->
        <profile>  
            <id>aliyun</id>
            <repositories>  
                <repository>  
                    <id>aliyun</id> 
                    <name>aliyun maven</name>
                    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                    <releases>  
                        <enabled>true</enabled>  
                    </releases>  
                    <snapshots>  
                        <enabled>true</enabled>  
                    </snapshots>  
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>aliyun</id>
                    <name>aliyun maven</name>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <!-- 激活配置 -->
    <activeProfiles>
        <activeProfile>jdk-1.8</activeProfile>
        <activeProfile>yinqihui</activeProfile>
        <activeProfile>aliyun</activeProfile>
    </activeProfiles>

</settings>

6. Idea的右侧 maven 窗口中项目变为灰色的问题解决

  1. 我们先看下现象,项目结构中项目浅色,maven 窗口项目被忽略
  2. 解决办法 : 估计是自己不知道什么时候点击到了,取消即可

三. Mac 中 maven 的特别问题

1. 安装

2. mvn 全局命令的使用

无法使用 mvn 命令的情况(如下图):

1. 新建mac自带的terminal窗口
2. 新建idea 的terminal 窗口

mvn 查看java java执行mvn命令_mvn 查看java_08


mvn 查看java java执行mvn命令_ide_09

原因分析: MAC使用的终端是zsh,zsh加载的是 ~/.zshrc文件,而 ‘.zshrc’ 文件中并没有定义任务环境变量

解决方法(参考下图):
1、终端中执行命令,打开.zshrc文件:
vi ~/.zshrc
2、在~/.zshrc文件最后,增加一行:
source ~/.bash_profile
3、执行命令,使其立即生效
source ~/.zshrc
4: 打开新窗口测试

mvn 查看java java执行mvn命令_xml_10

mvn 查看java java执行mvn命令_ide_11


mvn 查看java java执行mvn命令_mvn 查看java_12