最近在给电脑配环境,遇到很多问题,这里记录下一些。
快速一览
- maven基础
- 前置条件
- 更改本地仓库
- 更改中央仓库
- 为本地仓库导入jar包
- 问题儿童回收站
maven基础
定义:是项目管理软件,可以管理项目。
jar包不再直接放在项目下,而是在maven的jar包仓库里,节省了磁盘空间。
大概原理是这样的:
- maven工程存放jar包的坐标;
- 坐标指向本地仓库;
- 本地仓库没有的情况下,联网从中央仓库下载(中央仓库啥都有);
- 公司中,使用远程仓库(内网,私服),远程仓库中没有,远程仓库向中央仓库下载。
前置条件
- 在官网下载了maven压缩包;(这里我遇到了一个问题,后面会提到,这里建议下3.5.2版本)
- 解压到了无中文的路径下;
- 添加MAVEN_HOME环境变量,同时将bin加到路径下。
为了验证前置条件完成,可以使用命令行,输入 mvn -v。如果跳出版本信息,说明安装成功。
差不多长这样:
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
Maven home: C:\Users\zgwkw\Documents\apache-maven-3.5.2\bin\..
Java version: 1.8.0_201, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_201\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
更改本地仓库
作为一个踩坑小能手,当然是把能遇到的坑都踩一遍啦~
我们首先修改本地仓库位置,因为默认是装在C盘一个不太好找的位置的,而且担心以后重装系统丢失仓库,所以我们在一个好找的无中文的路径下新建一个文件夹:maven_repository
没错,名字简单粗暴。
首先我们打开安装好的maven文件中的配置文件:apache-maven-3.6.3\conf\settings.xml
如果没有特殊的软件,可以使用记事本打开,我是之前装了Notepad++(不知道为什么有两个加号),所以就用它打开了,和记事本比起来这种软件会显得整整齐齐,易于修改。
类似的软件还有很多,比如……举不出例子,有一个就行了,可以自行百度选择自己喜欢的,拿来改配置写类似的文档相当好用。
打开配置文档以后,找到localRepository所在的行,那行全被注释了,所以使用的是默认的仓库位置,我们在下面添加我们自己的路径,其实就是我们之前新建的文件夹的路径:
//注意:在原配置文件中:
<!--被这种尖括号和杠杠包围起来的字段都是注释,别复制到括号里面去,在他们的下面复制-->
<localRepository>C:\Users\zgwkw\Documents\maven_repository</localRepository>
为了验证是否成功,照样在命令行输入: mvn help:system
然后它就开始下载自己需要的jar包,过一会后会出现成功的标志,类似这样:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:36 min
[INFO] Finished at: 2020-05-20T12:07:01+08:00
[INFO] Final Memory: 13M/106M
[INFO] ------------------------------------------------------------------------
还挺明显的,那个SUCCESS绿油油的,和一堆白色的字母形成鲜明对比。另一个设置成功的佐证是我们之前新建的文件夹下面出来了好多文件夹。
本地仓库里存在jar包却无法使用,打开了文件夹,找到其中的remote.properties文件,将jar包那行注释掉,目前来看可以使用。
而且只改了一个,其他的就都可以啦
更改中央仓库
maven仓库如果在本地仓库找不到自己需要的资源,就会向中央服务器请求,但是因为这个服务器在国外,所以下载速度相当感人,于是我们需要设置一个私服仓库,大概这么个意思吧,打开我们的配置文件,找到mirrors,在其中加入代码:
<mirror>
<!--This sends everything else to /public -->
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
这个是阿里的私服,平时可以从这里下载包,对了,这里换行啊空格啊什么的请用英文输入法,不然有时候会报错,有个大佬介绍了一种方法,就是删掉所用空格,使用英文的换行和tab,之前我在这一个环节一直报错,解决方案就是这样。
照样用mvn help:system验证
说起来也不知道那是什么意思,趁机百度一下…… 大概的作用就是
- 从中央仓库帮助我们下载一些缺省(默认)要的但没有的jar包,此外还有更新各种配置信息
- 打印出所有的Java系统属性和环境变量
百度结束后,我的东西也下完了:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:33 min
[INFO] Finished at: 2020-05-20T12:13:59+08:00
[INFO] Final Memory: 16M/161M
[INFO] ------------------------------------------------------------------------
为本地仓库导入jar包
接下来要为本地仓库导入jar包,虽然说maven项目发现本地没有包而你需要的话,会自己去下载,但是相当影响效率,而之前的本地项目都是网课的组织打包好直接下下来解压就好(真是轻松方便还不容易出错呀)
但是倔强青铜还是想成长为最强王者的,所以我决定百度一下……
然后度娘告诉我一种方法:使用命令行导入需要的jar包,大概步骤是这样的:
- 找到一个有各种jar包的网站:https://mvnrepository.com/
- 找到自己需要的包和版本,会有这样一段话,告诉我们jar包的基本信息,这段话大概是这样的:
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
- 然后……先把jar包下下来,再使用命令行把包导入到自己的仓库(没错,因为直接把jar包复制粘贴是没有用的)。以上面那个包为例,这个命令行大概长这样:
mvn install:install-file -Dfile=那个jar包在本地的位置.jar -DgroupIdcommons-io -DartifactId=commons-io -Dversion=2.4 -Dpackaging=jar
拜托!看看这个格式,还要我重新打字,就一个包我都不乐意,别说我还要导一堆包了。
好了,我们放弃治疗去打消消乐吧,再见Java,再见maven!
放弃是不可能放弃的,继续百度。大概过了半天,终于从各种天魔乱舞之中找到了一个神仙帖子。它用的是批量处理功能(真的好用啊)
- 首先我们新建一个文件夹,我的叫jardownload
- 然后在里面新建两个.txt文件,其中一个叫download,一个叫pom。
- download的内容是:++不太懂,以后再百度,我标一下++
call mvn -f pom.xml dependency:copy-dependencies
@pause
- pom文件的内容是你需要的那些包,dependencies前面的东西复制粘贴就好,在两个的dependencies之间加你需要的包,最重要的是组别、包名和版本:
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>temp.download</groupId>
<artifactId>temp-download</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 需要下载什么jar包 添加相应依赖 其余部分无需在意-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
</dependencies>
</project>
可以百度找一找常用的jar包,加入到这里。
- 保存内容,修改两个文件的后缀名,得到两个文件:pom.xml和download.bat
- 双击download.bat,等待运行成功
- 然后打开我们的本地仓库就又多了好多小可爱啦~
问题儿童回收站
之前我用的是maven3.6.2版本,一通操作猛如虎之后,开开心心打开我的IDEA,认认真真把maven版本和参考文件位置设定好,开始给项目的pom写依赖jar包,然后发现它根本找不到!!!一片红啊!!!
???
黑人问号脸打开百度,入眼的还是一堆各种操作,接下来罗列下我遇到的解决方法:
- 修改配置路径,重启IDEA——不行
- 删掉包下面的_remote.repositories文件——没有试,因为有人说不行,而这些包太多了我懒得删,怕删了没有效果;
- 删除IDEA文件下某个和我们私服仓库有关的index包,再重启项目更新依赖目录———不行
- 其他不记得的方法———蓝的记忆只有七秒,这也是我为什么要写记录的原因……
- 找到了一种相对有点效果的方法——比对了下它自带的包的repositories和我下载的包的内容,发现我多了一行:
spring-2.5.6.pom>nexus-aliyun=
spring-2.5.6.jar>nexus-aliyun=
下面.jar的一行是之前使用mvn help:system下载没有的,使用#注释,然后发现可以导包了。而且很神奇的地方在于只改了一个,但是整个文件夹内的包都能找到了。红色不见啦~
终于,我开开心心继续准备我的项目,然后发现,怎么我左边external libraries里面还是只有我的jdk1.8呢,说好的一堆spring包呢?
不慌,点开我的右边maven project,一波clean再install,然后它问题日志标红了……
这里说一下,问题日志出现过好几次,都让我去看看,但是我……懒。但是不解决不行啊,一个不会看日志的程序员不是好程序员,打开help>show log in exploer
拉到最下面,忽略掉大串信息,找到error,主要是两条:
1) No implementation for org.apache.maven.model.path.PathTranslator was bound.
while locating org.apache.maven.model.path.PathTranslator
for field at org.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.pathTranslator(Unknown Source)
at org.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)
2) No implementation for org.apache.maven.model.path.UrlNormalizer was bound.
while locating org.apache.maven.model.path.UrlNormalizer
for field at org.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.urlNormalizer(Unknown Source)
at org.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)
这个之前就报了好几次了,一直忽略,这次真的得去找一找,于是查了下发现可能是版本不一致,找到了一个旧版本的maven,就是我上面说的3.5.2,然后一波重新操作……
终于看到我可爱的spring出现在libraries啦,敲开心~
还有其他小问题:
- 本地仓库无法修改(之前被我弄乱了):解决方案为找到原本的pom文件,增加行为:
<localRepository>C:\Users\zgwkw\Documents\maven_repos</localRepository>
2.中央仓库配置为阿里的镜像失败,原因为地址不正确和段落之间可能存在的空格问题,需要去掉所有空格并严格使用tab,最后修改如下:
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
如有错谬,望指正。
共同学习,共同进步,我是蓝步芦,大家再见~