背景
某些离线场景下我们可能无法连接 Maven 中央库或其他内网私服,又想通过 Maven 对源码进行编译打包。
本文给出了在离线环境下使用 Maven 编译打包的方案。
前置条件
假设目标环境已经安装好了 JDK 和 Maven,并且将要编译的源码工程 demo-project
放置在了 /maven-offline/build
路径下。
解决方案
准备编译所需依赖
先在联网环境成功执行一次编译,保证使用的 Maven 本地缓存仓库(默认路径 ~/.m2/repository
)中包含了编译所需的依赖。
将本地缓存仓库目录 repository
发送至离线环境 /maven-offline/build
路径下:
├── demo-project
└── repository
清理所有 _remote.repositories
文件
repository
目录中可能包含了很多 _remote.repositories
文件,需先将这些文件进行清理,否则还是会去中央库查找依赖。
- Windows:
for /r %i in (_remote.repositories) do del %i
- Linux:
find ./repository -name "_remote.repositories" -exec rm {} \;
Maven 离线编译配置
在 /maven-offline/build/
下新建 settings.xml
,内容如下:
<?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>/maven-offline/build/repository</localRepository>
<offline>true</offline>
</settings>
配置文件中只需设定两个 Simple Values:
localRepository
:指定清理过_remote.repositories
文件的路径offline
:使用离线模式
指定配置文件执行编译
以在 /maven-offline/build/
路径下执行命令为例:
├── demo-project
├── repository
└── settings.xml
mvn -s settings.xml -f demo-project/pom.xml clean package