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

108 java offline maven

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

nsf*_*n55 151

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

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

  • 还要考虑您可以使用"mvn dependency:go-offline"来确保_all_ pom.xml中引用的依赖项存在于本地存储库中. (8认同)
  • 不幸的是`mvn依赖:go-offline`根本就没有抓住一切.例如,在一个新的虚拟机中,即使在运行此目标之后,我的项目仍然必须下载内容.另见[本期](https://jira.codehaus.org/browse/MDEP-82). (7认同)
  • 我的经验表明 -o 选项无法正常工作,并且离线目标远不足以允许完全离线构建:请参阅我在此处找到的解决方案:http://stackoverflow.com/q/43661755/ 1767316 (4认同)

Mar*_*elo 10

如果您的LAN中有可以访问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>
Run Code Online (Sandbox Code Playgroud)

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

  • 使用artifactory,您可以备份整个存储库,然后在LAN中的一台PC中将其还原. (2认同)

Jyo*_*ash 8

你有两个选择:

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

<localRepository>C:/Users/admin/.m2/repository</localRepository>
Run Code Online (Sandbox Code Playgroud)

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

mvn -o clean install -DskipTests=true
mvn -o jetty:run
Run Code Online (Sandbox Code Playgroud)


FrV*_*aBe 6

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

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


luk*_*a5z 5

可悲的是,dependency:go-offline它对我不起作用,因为它没有缓存所有内容,即。POM 文件和其他隐式提及的依赖项。

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

  • 重点是在不实际构建项目的情况下完成它,所以我们可以分阶段进行 (2认同)