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 打包到本地仓库
2. Idea 中 maven 窗口的工具解析
二. 常见的 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
试过都没有用
最后解决:
- pom.xml 文件注释依赖
- 点击 invalidate Caches/Restart…
- 删除本地库的依赖
- idea重新启动后继续maven reload 一下
3. maven聚合项目打包问题
出现unable to find a main class问题,主要是由于聚合项目的公共模块common模块,不需要主启动类
解决方法:
删除自身模块的中 spring-boot-maven-plugin插件
4. 项目打包指定报名
#maven 的新版本都是${project.artifactId}
#此处也可以写固定字符串作为打包的名称
<build>
<finalName>${project.artifactId}</finalName>
</build>
打包出现以下问题,是 maven 的旧版本的问题
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 窗口中项目变为灰色的问题解决
- 我们先看下现象,项目结构中项目浅色,maven 窗口项目被忽略
- 解决办法 : 估计是自己不知道什么时候点击到了,取消即可
三. Mac 中 maven 的特别问题
1. 安装
2. mvn 全局命令的使用
无法使用 mvn 命令的情况(如下图):
1. 新建mac自带的terminal窗口
2. 新建idea 的terminal 窗口
原因分析: MAC使用的终端是zsh,zsh加载的是 ~/.zshrc文件,而 ‘.zshrc’ 文件中并没有定义任务环境变量
解决方法(参考下图):
1、终端中执行命令,打开.zshrc文件:
vi ~/.zshrc
2、在~/.zshrc文件最后,增加一行:
source ~/.bash_profile
3、执行命令,使其立即生效
source ~/.zshrc
4: 打开新窗口测试