在离线环境进行maven项目开发时,总会遇到需要频繁添加jar包依赖来进行功能拓展,然而某一个jar包的引入,又会需要间接依赖很多其他的类库,一个一个地下载又很麻烦。当然你也可以在外网搭建一套同样的开发环境,通过开发工具自动下载,再把外网本地仓库拷贝到内外环境。这里记录一种稍微简单点的方法:
1、前提:外网安装了maven以及配套java,并配置maven以及java环境变量;
2、随便找一个位置创建文件夹,在该文件夹下创建一个文件:
<?xml version="1.0"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="http:///2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.">
<modelVersion>4.0.0</modelVersion>
<groupId>download</groupId>
<artifactId>download</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
</dependency>
</dependencies>
</project>
自己把需要下载的依赖补充完整。
3、当前目录下运行:
mvn -f dependency:copy-dependencies
执行完成后,当前目录下会多出一个target文件夹,里头是下载的直接或间接依赖包,在maven仓库下会有完整的.jar和.pom,全部拷贝就好了。
4、maven默认本地仓库为C:\Users\你的账户\.m2\repository;
可以自己改maven的相关配置,配置文件在maven安装目录下 /conf/,设置本地仓库位置以及国内下载镜像源:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="/SETTINGS/1.0.0" xmlns:xsi="http:///2001/XMLSchema-instance" xsi:schemaLocation="/SETTINGS/1.0.0 /xsd/settings-1.0.">
<localRepository>D:\ide\maven\localRepository</localRepository>
<interactiveMode>true</interactiveMode>
<offline>false</offline>
<pluginGroups>
<pluginGroup></pluginGroup>
<pluginGroup></pluginGroup>
</pluginGroups>
<proxies>
<!--
<proxy>
<id></id>
<active>true</active>
<protocol>http</protocol>
<username></username>
<password></password>
<host></host>
<port></port>
<nonProxyHosts></nonProxyHosts>
</proxy>
-->
</proxies>
<servers>
<!--
<server>
<id></id>
<username></username>
<password></password>
</server>
-->
<!--
<server>
<id>siteServer</id>
<privateKey>/path/to/private/key</privateKey>
<passphrase>optional; leave empty if not used.</passphrase>
</server>
-->
</servers>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
</profiles>
<activeProfiles>
</activeProfiles>
</settings>
5、我自己把外网的repository全部复制到内网之后,出现了maven库不能用的问题,主要是repository里的_remote.repositories和*.lastUpdated文件导致的,需要删除:
public class Test {
public static void main(String[] args) {
File file = new File("D:\\ide\\maven\\localRepository");
delete(file);
}
private static void delete(File file) {
if(file == null) {
return;
}
if(()) {
File[] files = ();
if(files != null) {
for(File childFile : files) {
delete(childFile);
}
}
} else {
if(().equals("_remote.repositories") || ().endsWith(".lastUpdated")) {
();
}
}
}
}