Java 如何通过gradle(在函数中)在本地maven repo中安装子项目?

Java 如何通过gradle(在函数中)在本地maven repo中安装子项目?,java,maven,gradle,groovy,gradlew,Java,Maven,Gradle,Groovy,Gradlew,在gradle,当运行我的脚本时,我有一堆依赖于其他人的子项目。我们需要将它们作为外部JAR(不是出于各种原因而编译项目)。所以我需要在本地安装它们。我希望这是一个在父级中定义的函数 当我试图在函数中调用install:projName“时,我得到了错误: 在org.gradle.api.project类型的根项目“test”上找不到参数[:projName]的方法install() 我该怎么做 ext.installLocal = {moduleName -> //...eli

在gradle,当运行我的脚本时,我有一堆依赖于其他人的子项目。我们需要将它们作为外部JAR(不是出于各种原因而编译项目)。所以我需要在本地安装它们。我希望这是一个在父级中定义的函数

当我试图在函数中调用
install:projName“
时,我得到了错误:

在org.gradle.api.project类型的根项目“test”上找不到参数[:projName]的方法install()

我该怎么做

ext.installLocal = {moduleName ->

    //...elided... doing some checking, conditionals, etc

    //Try to install locally
    install ":${moduleName}"
}

您需要将
build.finalizedBy(publishToMavenLocal)
命令添加到所有子项目
build.gradle
文件中,这些子项目需要在maven local中推送。如果需要将所有子项目推送到maven local,可以在main
build.gradle
文件的
subprojects{}
closure中调用此命令。但请记住,如果子项目相互依赖,则它们的构建顺序至关重要

您从哪里获得
安装
?我相信您希望将
发布到本地
任务。但这听起来像是一个-为什么你“需要把它们作为外部罐子拉进来”?(请注意,无论哪种方式,Gradle最终都会将相关JAR放在您的类路径上)。@OliverCharlesworth I get
“在org.Gradle.api.project类型的根项目“test”上找不到参数[:projName]的publishToAvenLocal()方法。
。这是同一个问题。如何从方法内部调用该任务?不能“调用”任务。gradle中的任务形成一个依赖关系图,即您的任务以某种方式依赖于其他任务。我相信你在Gradle想要实现的目标将是相当棘手的-需要将本地出版作为流程的一部分吗?@OliverCharlesworth需要用于测试目的。我们有另一个子项目,使用这些其他应用程序进行测试,它需要将它们作为外部依赖项引入,这样我们就可以100%测试它,因为它们将在prod中使用。谢谢,我会尝试这个。但是编译依赖项是否会强制执行构建顺序,并在每个梯度中包含最终的by?或者我仍然需要硬编码订单?如果某个项目需要您的
.m2
文件夹中的其他项目,那么构建订单可能很重要。但是,如果默认顺序有效,那么就没有什么可担心的了。因此,我有以下几点:
模块测试仪
依赖于
模块一
,而
模块二
。因此,我需要在本地maven中安装
模块二
,然后再安装
模块一
,这需要在运行
模块测试仪之前进行。如果我把
build.finalizedBy(PublishToAvenLocal)
放在每一个中,它会工作吗?或者我需要做更多的事情吗?是的,应该可以。您正确定义了存储库。Gradle还需要知道,它应该查看本地maven存储库<代码>存储库{mavenLocal()}
类似于您的
build.gradle
文件。不幸的是,它不起作用。当我执行
/gradlew clean build
时,它会以随机顺序执行这些操作,并且会失败,因为它首先执行模块1,而在没有构建和安装模块2的情况下失败。当发现模块1依赖于模块2时,如何使其构建模块2?