我如何强制 Maven 使用我的本地存储库,而不是去远程回购来检索工件?

我在 Mac Yosemite 上使用 Maven3.3.3和 Java8,我有一个多模块的项目。

    <modules>
<module>first-module</module>
<module>my-module</module>
…
</modules>

当我使用“ mvn clean install”构建我的一个子模块时,例如,从上面的“ my-module”,这个构建尝试从我在 ~/中定义的远程存储库下载子模块构件。M2/setings.xml 文件。输出如下

[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.9 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151104.200545-4.pom

如何强制 Maven 检查我的本地 ~/。在尝试从远程存储库下载之前先下载 m2/存储库?下面是我在 ~/中定义远程存储库的地方。M2/setings.xml 文件..。

<profile>
<id>releases</id>
<activation>
<property>
<name>!releases.off</name>
</property>
</activation>
<repositories>
<repository>
<id>releases</id>
<url>https://my.remoterepository.com/nexus/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<id>snapshots</id>
<activation>
<property>
<name>!snapshots.off</name>
</property>
</activation>
<repositories>
<repository>
<id>snapshots</id>
<url>https://my.remoterepository.com/nexus/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>

编辑: 对于回答说当工件不在时下载发生,下面是终端输出,我证明文件在我的回购中,但 Maven 正试图下载它..。

Daves-MacBook-Pro-2:my-module davea$ ls -al ~/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
-rw-r--r--  1 davea  staff  10171 Nov  5 10:22 /Users/davea/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
Daves-MacBook-Pro-2:my-module davea$ mvn clean install
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.mainco.subco:my-module:jar:87.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-antrun-plugin @ org.mainco.subco:my-module:[unknown-version], /Users/davea/Documents/sb_workspace/my-module/pom.xml, line 678, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.8 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151106.043202-8.pom
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-   module-87.0.0-20151106.043202-8.pom (3 KB at 21.9 KB/sec)
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
305025 次浏览

Maven 总是首先检查您的本地存储库,但是,您的依赖项需要安装到您的 repo 中,以便 Maven 查找它。

首先在依赖模块中运行 mvn install,然后构建依赖模块。

依赖项具有快照版本。对于快照,Maven 将检查本地存储库,如果在本地存储库中找到的构件太旧,它将尝试在远程存储库中找到更新的构件。这可能就是你所看到的。

注意,此行为由存储库配置中的 updatePolicy指令控制(快照存储库的默认值是 daily)。

在我的情况下,我有一个多模块的项目,就像你一样。我必须更改项目所依赖的一个外部库的组 Id,如下所示。

来自:

<dependencyManagement>
<dependency>
<groupId>org.thirdparty</groupId>
<artifactId>calculation-api</artifactId>
<version>2.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependencyManagement>

致:

<dependencyManagement>
<dependency>
<groupId>org.thirdparty.module</groupId>
<artifactId>calculation-api</artifactId>
<version>2.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependencyManagement>

注意 < groupId > 部分。结果我忘了修改子模块的相应部分,这些子模块在它们的 pom 文件中定义了这种依赖关系。

这让我非常抓狂,因为这个模块可以在本地使用。

使用 mvn --help,您可以看到选项列表。

有一个类似 -nsu,--no-snapshot-updates Suppress SNAPSHOT updates的选项

因此使用命令 mvn install -nsu可以强制使用本地存储库进行编译。

要真正的 力量专家到 只有使用您的本地回购,您可以运行与 mvn <goals> -o-o告诉 Maven 让你“脱机”工作,它将远离网络。

O 选项对我不起作用,因为工件还在开发中,还没有上传,而且 maven (3.5. x)仍然试图从远程存储库下载它,因为根据我得到的错误,这是第一次。

但是这个为我修正了它: https://maven.apache.org/general.html#importing-jars

此手动安装后,也不需要使用脱机选项。

更新

我刚刚重新构建了依赖项,必须重新导入它: 常规的 mvn clean install对我来说不够

遵循以下步骤:

    1. 确保删除位于本地的 jar 文件夹中的所有内容,但要保留的 jar 除外。
      例如像. Repositories、 . pom、 . sha1、 . lastUpdated 这样的文件。
    1. 执行 mvn clean install -o命令

这将有助于使用本地存储库 jar 文件,而不是连接到任何存储库。

我也有同样的问题,运行 mvn clean install而不是 mvn clean compile解决了这个问题。 只有在使用 multi-maven-project 时才会出现这种差异,因为项目依赖关系是通过使用 install 上载到本地存储库的。

即使考虑到上面的所有答案,您可能仍然会遇到问题,这些问题将以错误终止您的 maven 离线构建。特别是,你可能会收到如下警告:

[WARNING] The POM for org.apache.maven.plugins:maven-resources-plugin:jar:2.6 is missing, no dependency information available

警告之后将立即出现进一步的错误,并且 maven 将终止。

对于我们来说,使用根据上述提示创建的 maven 离线缓存离线构建 maven 离线缓存的最安全的方法是使用以下 maven 离线参数:

mvn -o -llr -Dmaven.repo.local=<path_to_your_offline_cache> ...

特别是,选项 爱尔兰语使您不必像答案 # 4中建议的那样调优本地缓存。

还要注意 setings.xml 中的参数 < localRepositoryin > 指向本地 Maven 存储库的正确文件夹。

Use < classspathentry kind = “ var”path = “ M2 _ REPO/your jar location 没有创造任何可靠的环境

就为了给我两分钱。对我来说,只需要在 ~/.m2/repository目录中找到 jar 并使用它的版本。所以,用完之后

cd local-dependency/
mvn install

local-dependency罐将在 .m2/repository/com/your-organization/local-dependency/

~$ tree ~/.m2/repository/com/your-organization/local-dependency/
/home/felipe/.m2/repository/com/your-organization/local-dependency/
├── 0.1-SNAPSHOT
│   ├── maven-metadata-local.xml
│   ├── _remote.repositories
│   ├── local-dependency-0.1-SNAPSHOT.jar
│   ├── local-dependency-0.1-SNAPSHOT.pom
│   └── resolver-status.properties
└── maven-metadata-local.xml

然后将其用作本地依赖项

<dependency>
<groupId>com.your-organization</groupId>
<artifactId>local-dependency</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>