如何配置Maven进行离线开发?

时间:2011-08-29 17:07:16

标签: java maven offline

maven是否需要在某个时候连接到互联网才能使用它?具体意义是获取用于编译,清洁,包装等的内部maven插件?

14 个答案:

答案 0 :(得分:145)

您可以在离线模式mvn -o install下运行maven。当然,本地存储库中没有的任何工件都将失败。 Maven不是基于分布式存储库,但它们确实使事情更加无缝。由于这个原因,许多商店使用内部镜子,与中央回购增量同步。

此外,mvn dependency:go-offline可用于确保在开始脱机工作之前在本地安装所有依赖项。

答案 1 :(得分:10)

如果您的局域网中有可以访问Internet的PC,则应安装本地Maven存储库。

我建议Artifactory Open Source。这是我们在组织中使用的,它很容易设置。

  

Artifactory充当您的构建工具(Maven,Ant,Ivy,Gradle等)与外部世界之间的代理。

     

它缓存远程工件,因此您无需一遍又一遍地下载它们。

     

它阻止对内部工件的不需要的(有时是安全敏感的)外部请求,并控制部署工件的方式和位置,以及由谁构建。

设置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>

我们使用此解决方案是因为我们的开发机器中存在Internet访问问题,而某些工件下载了损坏的文件或根本没有下载。从那时起我们就没有遇到过问题。

答案 2 :(得分:8)

您有两种选择:

1。)在 settings.xml 中进行更改,将其添加到第一个标记

<localRepository>C:/Users/admin/.m2/repository</localRepository>

2.。)使用-o标签进行离线命令。

mvn -o clean install -DskipTests=true
mvn -o jetty:run

答案 3 :(得分:6)

Maven需要本地存储库中的依赖项。获得它们的最简单方法是使用互联网访问(或者使用此处提供的其他解决方案更难)。

假设您可以临时访问互联网,您可以使用maven-dependency-plugin及其dependency:go-offline目标准备离线。这会将所有项目依赖项下载到本地存储库(当然,依赖项/插件中的更改将需要新的Internet /中央存储库访问)。

答案 4 :(得分:4)

  

可悲的是dependency:go-offline并没有为我工作,因为它没有缓存   一切,即。 POM文件和其他隐式提及依赖项。

解决方法是在settings.xml文件中<localRepository>...</localRepository>指定本地存储库位置,或者使用mvn -Dmaven.repo.local=...参数运行mvn -o ... 。 在初始项目构建之后,应该缓存所有必需的工件,然后您可以以相同的方式引用存储库位置,同时在脱机模式下运行Maven构建(cd ~ )。

答案 5 :(得分:3)

在离线之前,您必须确保所有内容都在您的本地仓库中,这在离线工作时是必需的。为项目/ pom(s)运行“mvn dependency:go-offline”,你打算继续努力,将减少实现这一目标的努力。

但它通常不是整个故事,因为依赖:go-offline只会下载“裸构建”插件(go-offline / resolve-plugins does not resolve all plugin dependencies)。因此,您必须找到一种方法将deploy / test / site插件(可能还有其他插件)及其依赖项下载到您的repo中。

此外,依赖性:go-offline不会下载pom的工件本身,因此你必须依赖:如果需要,复制它。

有时候 - 正如MaDa写的那样 - 你不知道,在离线的时候你需要什么,这使得完全没有“足够”的回购。

无论如何都有正确填充的回购,您只需要添加“&lt; offline&gt; true&lt; / offline&gt;”到Maven的settings.xml下线。

在离线时,请勿更改用于填充回购的Maven个人资料(ID)。 Maven使用“身份”识别其元数据中的下载工件,该身份绑定到配置文件ID。

答案 6 :(得分:2)

这对你有用吗?

http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html

不要忘记将其添加到您的插件存储库并将网址指向您的存储库所在的位置。

<repositories>
    <repository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </pluginRepository>
</pluginRepositories>

如果没有,您可能需要运行本地服务器,例如阿帕奇,在你的机器上。

答案 7 :(得分:2)

只需使用Maven存储库服务器,如Sonatype Nexus http://www.sonatype.org/nexus/或JFrog Artifactory https://www.jfrog.com/artifactory/

在一个开发人员构建项目之后,由下一个开发人员或Jenkins CI构建将不需要Internet访问。

Maven存储库服务器也可以配置代理来访问Maven Central(或更需要的公共存储库),并且它们可以在远程存储库中拥有cynch'ed工件列表。

答案 8 :(得分:1)

如果您使用的是IntelliJ,只需转到偏好设置 - &gt; 构建,执行,部署 - &gt; 构建工具 - &gt; Maven 并选中/取消选中离线工作

答案 9 :(得分:0)

直接回答您的问题:它不需要互联网连接,但可以访问存储库,局域网或本地磁盘(使用此处发布的其他人的提示)。

如果您的项目尚未处于成熟阶段,这意味着当POM经常更改时,离线模式将非常不切实际,因为您还必须经常更新您的存储库。除非您能获得具有所需内容的存储库副本,但您怎么知道?通常,您从头开始创建存储库,并在开发过程中逐渐克隆(在连接到另一个存储库的计算机上)。 repo1.maven.org公共存储库的副本重达数百GB,因此我也不建议使用暴力。

答案 10 :(得分:0)

在离线工作之前准备好运行 mvn dependency:go-offline

答案 11 :(得分:0)

我的经验表明-o选项无法正常运行,并且离线目标远远不足以允许完整的离线构建:

我可以验证的解决方案包括使用--legacy-local-repository maven选项而不是-o(离线)选项和 使用本地存储库代替分发存储库

此外,我必须将local-repo的每个maven-metadata-maven2_central.xml个文件复制到maven所期望的maven-metadata.xml格式中。

查看我找到的解决方案here

答案 12 :(得分:0)

一个新的插件似乎可以解决mvn dependency:go-offline的缺点:

https://github.com/qaware/go-offline-maven-plugin

将其添加到pom中,然后运行mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies。设置所有动态依赖项后,maven将不会尝试再次下载任何内容(直到更新版本)。

答案 13 :(得分:-3)

<offline> false </offline>

<localRepository>${user.home}/.m2/repository</localRepository>

<offline> true <offline>

<localRepository>${user.home}/.m2/repository</localRepository>

将离线标签从false更改为true。

将从在线回购中下载