gpt4 book ai didi

gradle - 如何在另一个子项目的gradle任务中从一个子项目调用代码?

转载 作者:行者123 更新时间:2023-12-03 05:07:03 25 4
gpt4 key购买 nike

我有一个带有两个子项目的项目。

这些子项目之一“A”包含要发布到 Artifact 的代码。

另一个子项目“B”的任务需要完全执行A代码中的一种方法。我可以用groovy复制逻辑,但是实际上有什么方法可以让我在子项目B中的任务调用作为子项目A的一部分编译的代码吗?

我试图在B中添加一个buildscript块,以将 Artifact 从A添加到类路径:

buildscript {
dependencies {
classpath project(':subproject-a')
}
}

...但是这给了我一个错误:

Cannot use project dependencies in a script classpath definition.



我不相信我可以将subproject-a移到 buildSrc,因为我还将其 Artifact 发布到maven存储库中供其他项目使用。

最佳答案

您遇到了鸡或蛋的问题,所有Gradle项目类加载器在编译任何类之前都已解决。可以使用自定义配置和Classloader解决此问题

例如:

configurations {
custom
}
dependencies {
custom project(':subproject-a')
}
task customTask {
doLast {
def urls = configurations.custom.files.collect { it.toURI().toURL() }
ClassLoader cl = new java.net.URLClassLoader(urls as URL[])
Class myClass = cl.loadClass('com.foo.MyClass')

// assuming zero args constructor
Object myObject = myClass.newInstance()

// assuming method which accepts single String argument
java.lang.reflect.Method myMethod = myClass.getMethod('myMethodName', String.class)
myMethod.invoke(myObject, 'methodArg')
}
}

关于gradle - 如何在另一个子项目的gradle任务中从一个子项目调用代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56503935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com