由于某些原因,我的离岸团队无法从我的客户ArtiFactory(我们的组织依赖库)下载构件(依赖项)。“刷新依赖项”不会触发任何事情,并会给出超时异常。我看到我的“Gradle Dependency”已下载到位置“D:/C813507/Gradle/gradle-1.11/bin/caches/modules-2/files-2.1/”.我可以把这个文件夹压缩后寄给他们吗?他们如何在Gradle中实现指向其本地目录的内容。我的构建Gradle有以下几行。如何在Windows操作系统中将URL指向本地目录
repositories {
maven {
url 'http://artifactory.myorg.com:8081/artifactory/plugins-release'
}
}
6条答案
按热度按时间pexxcrt21#
如果您不能授予您的离岸团队访问权限,您可以将所需的所有依赖项JAR复制到单个目录,然后使用
flatDir
存储库。另一种不使用
flatDir
存储库的方法是:vaj7vani2#
您可以按如下方式声明本地
maven
存储库,而不是配置flatDir
存储库:正如**@Peter Niederwieser**提到的,
flatDir
仓库不支持传递依赖解析。maven
本地存储库可以。tnkciper3#
使用如下所示的flatDir是一种选择:
这很管用。但是,如果存在包含相同JAR的mavenCentral()或其他maven储存库,则maven储存库将优先于flatDir。
摘自Gradle文档:https://docs.gradle.org/current/userguide/repository_types.html
Gradle将根据构件的存在动态生成模块描述符(没有任何依赖信息)。然而,由于Gradle更喜欢使用其描述符是从实际元数据创建而不是生成的模块,平面目录存储库不能用于用来自其他存储库的真实元数据覆盖构件。例如,如果Gradle在平面目录存储库中只找到jmxri-1.2.1.jar,但在另一个支持元数据的存储库中找到jmxri-1.2.1.pom,它将使用第二个存储库来提供模块。
所以Flat Dir不是很好。我们应该像第二个答案中提到的那样使用本地Maven存储库。但第二个答案有几个问题
1.不可携带
1.如果神器也出现在全球回购中,则不清楚它将从哪里挑选。
我们可以使用如下解决方案来解决这些问题:
1.在项目目录下创建一个名为libs的文件夹
1.将您的构件复制到这个libs目录中(如果您使用的是git或任何其他SCM,请确保分发此libs fodler,以便其他人可以只使用
gradle build
而不会出现任何问题)1.在libs目录中声明一个maven repo,并在列出任何其他repos之前调用mavenLocal()。这一步对于确保从您的本地目录而不是从其他全局存储库中选择JAR非常重要
这样,您可以确保即使JAR存在于其他存储库中,它也只会从您的本地目录中提取,并且解决方案也是可移植的。
ffvjumwh4#
用浏览器打开目录中的文件,然后复制路径。
vsnjm48y5#
重复其他答案并提供更多细节,在Gradle多项目中,将块放入顶级build.gradle并下推到所有项目。如果您正在检查存款,名称会很有帮助
b09cbbtk6#
对亚历克斯·利波夫的回答进行扩展,这超出了最初的问题的细节,但对于任何自问标题问题的人来说:
因此,您希望使用Gradle及其巧妙的依赖项管理(通过Maven),也许可以将您的项目A发布到某个本地存储库,然后在另一个项目B中将其引入。这里的flatDir肯定不是您想要的,因为项目A的任何依赖项都不会为项目B所知。
您需要的是本地maven存储库。这不需要设置任何类型的本地服务器。它实际上只是另一个本地目录,您的项目A不仅在其中存储JAR,还在其中存储一些额外的文件,例如用于其依赖项的文件。
将Gradle指向本地目录的操作如下所示:
您可能会想使用
mavenLocal()
,因为这是默认的本地maven存储库(在您的用户配置文件下,在.m2中),但是如果希望您的文件驻留在您选择的目录中,mavenLocal不是办法。您可能还想使用maven.repo.local
系统属性将默认的本地maven存储库更改为您选择的目录,但这会将您可能拥有的任何其他本地项目的内容转储到您选择的目录中。现在,如果您从任何maven目录中提取依赖项,则不能简单地将JAR文件转储到那里,就像您可以使用flatDir那样。下面是如何使用Gradle来实现这一点。
如何将文件放入本地maven库中
首先,您需要该插件来启用maven发布。
然后,在构建文件的
publishing
扩展名中,您可以再次指定您的存储库,类似于前面与以前不同的是,我们还向存储库添加了一个名称。这是因为maven插件现在将为它创建任务,例如
publishAllPublicationsToMyPathRepository
。如果您已经为您的项目创建了一个Maven出版物,并且只想在本地找到这样做的方法,那么这里的工作就完成了。如果不是,那么Next仍在
publishing
范围内,下面是一个示例这将创建名为
publish<project.name>PublicationTo...
的任务,它将以正确的格式将您的项目A放入本地目录。如果检查所创建的目录结构,您将发现groupID、artifactID和版本,然后是JAR和元数据文件。您应该用这个吗
正如其他人指出的那样,本地存储库打破了“随处构建”的原则。然而,如果另一种选择是使用flatDir,那么这可能是更可取的,并且更像是应该如何使用Gradle。
Maven存储库应该是不变的。您通常不应该发布一个版本,然后更改代码并再次发布相同的版本。如果您使用快照版本(例如,您的版本字符串以
-SNAPSHOT
结尾),Maven插件将在您每次运行PUBLISH时自动创建唯一的发布。这可能会创建很多文件,因此要注意这一点。当使用
mavenLocal
进行发布时,发布将具有maven-metadata-local.xml
而不是maven-metadata.xml
。它们不包含校验和文件,也不会创建唯一发布,即使对于快照版本也是如此。我尝试使用mavenLocal { url = uri("...") }
,但这也不能实现真正的本地发布(Gradle 7.2)。如果您真的想要本地发布模式,从标准的maven本地目录获取它的复制任务可能是唯一的方法。