如何从Gradle调用自定义Java方法

如何从Gradle调用自定义Java方法,java,gradle,Java,Gradle,请问,在Gradle构建脚本中调用Java方法最方便的方法是什么?此方法包含我希望在构建期间使用的功能;一项功能太复杂,无法作为脚本中的Groovy方法,但不足以命令完整的自定义Gradle插件 我的问题不是从Gradle运行Java应用程序。这将涉及到JVM的分叉,并且没有简单的方法可以将输出发布回Gradle,我需要那个输出 最初我的代码是src/main/java,但必须在早期进行编译,才能从Gradle构建脚本中调用 然后我尝试将buildhelper类移动到一个子模块项目中,一个单类子

请问,在Gradle构建脚本中调用Java方法最方便的方法是什么?此方法包含我希望在构建期间使用的功能;一项功能太复杂,无法作为脚本中的Groovy方法,但不足以命令完整的自定义Gradle插件

我的问题不是从Gradle运行Java应用程序。这将涉及到JVM的分叉,并且没有简单的方法可以将输出发布回Gradle,我需要那个输出

最初我的代码是src/main/java,但必须在早期进行编译,才能从Gradle构建脚本中调用

然后我尝试将buildhelper类移动到一个子模块项目中,一个单类子模块,希望在调用主构建脚本之前构建子模块;我在里面放了:

 buildscript {
    dependencies {
       classpath 'this.project:build-helper:1.0-SNAPSHOT'
    }
 }

但是
build helper
子项目显然不是build first,尽管有in
设置。gradle
作为first,而build失败,因为无法识别依赖项。构建脚本似乎是在构建子模块之前进行评估的,而不是在构建任何其他模块之前。哦

有两个主要用例

源代码位于当前项目的
src/main/java
——因此定义buildscript类路径时该类不存在

选项:

  • 使用任务在另一个JVM中运行该类

  • sourceSets.main.runtimeClasspath构建一个类,并通过类加载器加载/运行该类

  • 例如:

    源位于另一个项目中。-因此,在定义buildscript类路径之前,该类将存在

    在这种情况下,您可以将项目添加到buildscript类路径并调用它

    buildscript {
        dependencies {
            classpath project(':other-project')
        }
    }
    task doStuff {
        doLast {
            def myClass = new MyClass()
            myClass.doStuff()
        }
    }
    

    有两个主要用例

    源代码位于当前项目的
    src/main/java
    ——因此定义buildscript类路径时该类不存在

    选项:

  • 使用任务在另一个JVM中运行该类

  • sourceSets.main.runtimeClasspath构建一个类,并通过类加载器加载/运行该类

  • 例如:

    源位于另一个项目中。-因此,在定义buildscript类路径之前,该类将存在

    在这种情况下,您可以将项目添加到buildscript类路径并调用它

    buildscript {
        dependencies {
            classpath project(':other-project')
        }
    }
    task doStuff {
        doLast {
            def myClass = new MyClass()
            myClass.doStuff()
        }
    }
    

    因此,最简单的方法是将我的build helper Java源代码放入
    buildSrc
    目录:
    /buildSrc/src/main/Java/foo/bar/Extractor.Java
    ,就是这样,您可以从Gradle构建脚本中的任何地方直接调用
    新提取器(..).extratMetadata(…)
    ,无需导入包,无需使用Java插件,Gradle默认理解buildScr下类似Maven的目录结构


    归功于:

    所以最简单的方法是将我的构建助手Java源代码放入
    buildSrc
    目录:
    /buildSrc/src/main/Java/foo/bar/Extractor.Java
    ,就这样,您可以从Gradle构建脚本中的任何地方直接调用
    新提取器(..).extratMetadata(…)
    ,无需导入包,无需使用Java插件,Gradle默认理解buildScr下类似Maven的目录结构


    贷记至:

    我尝试了第二个建议,但对我无效,项目属性不允许在那里,并且帮助者项目不在建筑中。我必须使用稍微过时的Gradle版本3.5,所以也许这就是为什么..啊,你是对的。。。你可以用一只手来做这个。看到了,我尝试了第二个建议,但它对我不起作用,项目属性不允许在那里,助手项目也没有生成。我必须使用稍微过时的Gradle版本3.5,所以也许这就是为什么..啊,你是对的。。。你可以用一只手来做这个。看到和