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


117

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


您有一台可以上网的机器吗?也许是服务器?
Marcelo

2
我们做到了,但是将事情从那里转移到开发环境是一件很乏味的事情。

Answers:


163

您可以在脱机模式下运行maven mvn -o install。当然,本地存储库中不可用的任何工件都会失败。Maven并非基于分布式存储库,但是它们肯定会使事情变得更加无缝。因此,许多商店使用内部镜像,这些镜像与中央存储库逐渐同步。

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


与此答案相结合,我发现mvn带有其“核心”插件(即编译器)。所以这与mvn install我可以得到我所需要的。

8
还考虑您可以使用“ mvn依赖项:脱机”来确保本地存储库中存在pom.xml中引用的所有依赖项。
托尔比约恩Ravn的安德森

10
不幸的mvn dependency:go-offline是,它并不能抓住一切。例如,在一个新的虚拟机内部,即使达到此目标,我的项目仍必须下载内容。另请参见此问题
ph

2
我的经验表明,-o选项无法正常工作,脱机目标远不足以允许完整的脱机构建:请参阅我在此处找到的解决方案:stackoverflow.com/q/43661755/1767316
user1767316

如果将标志-llr附加添加到-o,则它应该可以工作。
乌度

10

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

我推荐Artifactory Open Source。这是我们在组织中使用的,设置起来非常容易。

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

它缓存了远程工件,因此您不必一遍又一遍地下载它们。

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

设置Artifactory之后,您只需要settings.xml在开发机器中更改Maven :

<?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,并且某些工件下载了损坏的文件或根本没有下载。从那以后我们再也没有遇到过问题。


没有连接到LAN的具有访问权限的机器。

2
使用工件,您可以备份整个存储库,然后将其还原到LAN中的一台PC中。
Marcelo

7

为此,您有两个选择:

1.)更改settings.xml,在第一个标记中添加

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

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

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

6

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

因此,假设您可以暂时访问Internet,则可以使用具有其dependency:go-offline目标的maven-dependency-plugin准备脱机。这会将所有项目依赖项下载到本地存储库中(当然,对依赖项/插件的更改将需要新的Internet /中央存储库访问权限)。


4

遗憾的是dependency:go-offline,它没有为我工作,因为它没有缓存所有内容。POMs文件和其他隐式提及依赖项。

解决方法已经指定一个本地存储库的位置,无论是内settings.xml有文件<localRepository>...</localRepository>或通过运行mvn带有-Dmaven.repo.local=...参数。在初始项目构建之后,所有必需的工件都应被缓存,然后您可以在脱机模式(mvn -o ...)中运行Maven构建时以相同的方式引用存储库位置。


3

脱机之前,必须确保所有内容都在本地存储库中,这是脱机工作时必需的。为您打算进行的项目/ pom运行“ mvn依赖项:脱机”将减少实现此目标的工作量。

但这通常不是全部,因为dependency:go-offline只会下载“裸露的构建”插件(go-offline / resolve-plugins不能解决所有插件的依赖关系)。因此,您必须找到一种方法来将部署/测试/站点插件(可能还有其他)及其依赖项下载到您的存储库中。

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

有时-正如MaDa所写-有时您不知道脱机时需要什么,这使得拥有“足够的”回购通知几乎是不可能的。

无论如何,只要仓库已正确填充,您只需在Maven的settings.xml中添加“ <offline> true </ offline>”即可脱机。

离线时,请勿更改用于填充仓库的Maven配置文件(id)。Maven使用绑定到配置文件ID的“身份”识别元数据中下载的工件。


3

如果您使用的是IntelliJ,则只需转到“偏好设置” ->“ 构建,执行,部署” ->“ 构建工具” ->“ Maven”,然后选中/取消选中“脱机工作”


1
同样-Eclipse是Window-> Preferences-> Maven并选中“ Offline”
Stuart Brock

2

这对您有用吗?

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。


对于依赖项和插件(例如码头,tomcat等插件),似乎更多。我更关心内部maven插件,例如maven-compiler-plugin

1
@predhme:这种方法适用于所有插件,因为所有这些插件都放入本地计算机上的Maven存储库中
JoseK 2011年

2


(来源:jfrog.com

要么

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

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

Maven存储库服务器还可以将代理配置为访问Maven Central(或更多需要的公共存储库),并且它们可以在远程存储库中添加加密的工件清单。


1

我的经验表明,-o选项无法正常工作,脱机目标远不足以允许完整的脱机构建:

我可以验证的解决方案包括使用--legacy-local-repositorymaven选项而不是-o(脱机)选项,以及使用本地存储库代替分发存储库

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

请参阅我在这里找到的解决方案。


0

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

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


它是(但不是)作为Maven项目(蚂蚁)。因此,我拥有所需的所有库,但特别想知道Maven内部库。例如maven-plugin-compiler。

如果您拥有所有由Ant处理的依赖项,那么您可能仍然缺少Maven元数据,因此Maven不会选择它们。至于“ Maven内部库”,下载它们的唯一方法是构建您的pom结构并在连接互联网的计算机上运行它。“运行”是指执行您认为将要使用的每个目标,而不必只是“ MVN全新安装”。
MaDa 2011年

0

离线工作前的准备工作 mvn dependency:go-offline


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将不再尝试再次下载任何内容(直到您更新版本)。


-2
<offline> false </offline>

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

<offline> true <offline>

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

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

将从网上回购下载

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.