如何使Maven在特定的文件夹中只显示依赖项



由于某些原因,我需要有一个本地的,没有连接到某个应用程序所有依赖项的任何副本。我有一个脚本,可以下载这些依赖项,并将它们存储在一个与本地Maven存储库(如.m2/repository)没有什么不同的结构中。

现在,我想制作一种";伪应用程序";它根据存储库检查我的代码库,只查看那里的,而不查看其他。伪应用程序包含真实应用程序的pom.xml文件和一些Java文件,以便(除其他外)实际触发Swagger生成器。

在我的假人的父pom.xml中,我添加了

<repositories>
<repository>
<id>central</id>
<url>http://repo1.maven.org/maven2</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>downloaded</id>
<name>Downloaded dependencies</name>
<url>file://path/to/local/repository</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://repo1.maven.org/maven2</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>downloaded</id>
<name>Downloaded dependencies</name>
<url>file://path/to/local/repository</url>
</pluginRepository>
</pluginRepositories>

这不起作用,因为本地repo是空的,并且伪应用程序构建(mvn package)仍然成功。

我还尝试在虚拟应用程序中添加settings.xml,但这似乎也没有任何作用:

<settings>
<localRepository>path/to/local/repository</localRepository>
</settings>

作为参考,我在Gradle做了同样的事情,效果很好:

settings.gradle

pluginManagement {
repositories {
maven {
url 'path/to/local/repository'
}
}
}

和在build.gradle

buildscript {
repositories {
maven {
name 'local'
url "file://path/to/local/repository"
}
}
}
allprojects {
repositories {
maven {
name 'local'
url "file://path/to/local/repository"
}
}
}

那么,我如何只使用Maven来实现上面的Gradle配置呢?

您是否尝试过使用mvn -Dmaven.repo.local=<location>,它通过命令行选项定义本地缓存的位置。

最新更新