如何configurationMaven进行离线开发?
Maven是否需要连接到互联网才能使用它? 意思是具体获取内部的Maven插件进行编译,清理,打包等?
你可以在离线模式下运行maven mvn -o install
。 当然,在本地存储库中不可用的任何工件都将失败。 Maven并不是以分布式存储库为基础的,但它们确实使事情更加无缝。 因为这个原因,许多商店使用与中央回购增量同步的内部镜子。
另外,可以使用mvn dependency:go-offline
来确保在开始脱机工作之前,已经在本地安装了所有依赖项。
如果你的局域网里有一台可以上网的电脑,你应该安装一个本地的Maven仓库。
我推荐Artifactory开源 。 这是我们在组织中使用的,它很容易设置。
Artifactory充当您的构build工具(Maven,Ant,Ivy,Gradle等)与外部世界之间的代理。
它caching远程工件,以便不必一遍又一遍地下载它们。
它阻止了对内部工件的外部请求(有时对安全敏感),并控制工件的部署方式和部署方式。
设置Artifactory后,只需在开发机器中更改Maven的settings.xml
:
<?xml version="1.0" encoding="UTF-8"?> <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <mirrors> <mirror> <mirrorOf>*</mirrorOf> <name>repo</name> <url>http://maven.yourorganization.com:8081/artifactory/repo</url> <id>repo</id> </mirror> </mirrors> <profiles> <profile> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>libs-release</name> <url>http://maven.yourorganization.com:8081/artifactory/libs-release</url> </repository> <repository> <snapshots /> <id>snapshots</id> <name>libs-snapshot</name> <url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>plugins-release</name> <url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url> </pluginRepository> <pluginRepository> <snapshots /> <id>snapshots</id> <name>plugins-snapshot</name> <url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url> </pluginRepository> </pluginRepositories> <id>artifactory</id> </profile> </profiles> <activeProfiles> <activeProfile>artifactory</activeProfile> </activeProfiles> </settings>
我们使用了这个解决scheme,因为我们的开发机器有networking访问问题,有些工件下载了损坏的文件,或者根本没有下载。 自那以后我们没有问题。
你有两个select:
1.)在settings.xml中添加第一个标签
<localRepository>C:/Users/admin/.m2/repository</localRepository>
2.)使用-o标签进行离线命令。
mvn -o clean install -DskipTests=true mvn -o jetty:run
Maven需要你的本地仓库的依赖。 获取它们的最简单方法是使用互联网(或者使用其他解决scheme,这里提供的更难)。
因此,假设您可以临时访问互联网,您可以使用maven-dependency-plugin及其依赖关系:go-offline目标来准备离线 。 这将把你所有的项目依赖关系下载到你的本地仓库(当然依赖/插件的改变将需要新的互联网/中央仓库访问)。
可悲的
dependency:go-offline
并没有为我工作,因为它没有caching的一切,即。 POM文件和其他隐式提到的依赖关系。
解决方法是使用<localRepository>...</localRepository>
在settings.xml
文件中指定本地存储库位置 ,或者使用-Dmaven.repo.local=...
参数运行mvn
。 在最初的项目构build之后,所有必要的工件都应该被caching,然后你可以用同样的方式引用仓库的位置,而在离线模式( mvn -o ...
)下运行Maven构build。
这对你有用吗?
http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html
不要忘记把它添加到你的插件库中,并将这个url指向你的版本库。
<repositories> <repository> <id>local</id> <url>file://D:\mavenrepo</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>local</id> <url>file://D:\mavenrepo</url> </pluginRepository> </pluginRepositories>
如果没有,您可能需要在您的机器上运行本地服务器,例如apache。
在离线工作之前准备运行mvn dependency:go-offline
在离线之前,您必须确保所有内容都位于您的本地回购中,这是离线工作时所需的。 运行“mvn dependency:go-offline”项目(s)/ pom(s),你打算工作,将减less努力实现这一目标。
但通常情况并非如此,因为dependency:go-offline只会下载“裸机”插件( go-offline / resolve-plugins不能解决所有的插件依赖 )。 所以你必须find一种方法来下载部署/testing/网站插件(也许还有其他)和他们的依赖到你的回购。
此外依赖:脱机不会下载pom的工件本身,所以你必须依赖:复制它,如果需要的话。
有时候,正如MaDa写的那样,你不知道你在离线时会需要什么,这使得拥有一个“充足的”回购很不可能。
无论如何,有一个正确的填充回购,你只需要添加“<离线> true </离线>到Maven的settings.xml离线。
在离线状态下,不要更改用于填充回购的Mavenconfiguration文件(id)。 Maven通过一个“身份”来识别下载的元数据,该身份绑定到configuration文件ID。
要么
只需使用Maven仓库服务器,如Sonatype Nexus http://www.sonatype.org/nexus/或JFrog Artifactory https://www.jfrog.com/artifactory/ 。
在一个开发人员构build项目后,由下一个开发人员或Jenkins CI构build将不需要Internet访问。
Maven仓库服务器也可以configuration代理以访问Maven Central(或更多需要的公共仓库),并且可以在远程仓库中拥有cynch化的工件列表。
如果你使用的是IntelliJ,你可以直接进入首选项 – > 生成,执行,部署 – > 生成工具 – > Maven,然后选中/取消选中脱机工作 。
直接回答您的问题:它不需要互联网连接,但可以访问存储库,LAN或本地磁盘(使用其他人在这里发布的提示)。
如果你的项目还没有进入成熟阶段,那就意味着当POM经常更换时,离线模式将是非常不切实际的,因为你也必须经常更新你的仓库。 除非你能得到一个你需要的一切的存储库的副本,但你怎么知道? 通常你从头开始一个存储库,并在开发过程中(在连接到另一个存储库的计算机上)逐渐克隆。 repo1.maven.org公共仓库的副本重达数百GB,所以我也不会推荐暴力。
我的经验表明,-o选项无法正常工作,并且脱机目标远远不足以完全脱机构build:
我可以validation的解决scheme包括使用--legacy-local-repository
maven选项而不是-o
(脱机)选项,并使用本地存储库代替分发存储库
另外,我必须将本地回购的每个maven-metadata-maven2_central.xml
文件复制到maven-metadata.xml
预期的maven-metadata.xml
表单中。
看到我在这里find的解决scheme。