gradle javaexec错误“';apiElements';不允许直接使用";-梯度5.4.1

gradle javaexec错误“';apiElements';不允许直接使用";-梯度5.4.1,java,gradle,build.gradle,Java,Gradle,Build.gradle,我是Gradle的新手,正在尝试将现有的系统构建从ant迁移到Gradle。 作为其中的一部分,我需要对目录中的每个文件运行java程序。目录包含xml文件,java代码将在执行某些特定于业务的转换后解析.xml并将其转换为.java文件(这些java文件将被构建为在最终jar中生成类和包) 下面是我在Gradle中编写的函数 private runJavaFile(String dirPath) { FileTree tree = fileTree(dir: dirPath, incl

我是Gradle的新手,正在尝试将现有的系统构建从ant迁移到Gradle。 作为其中的一部分,我需要对目录中的每个文件运行java程序。目录包含xml文件,java代码将在执行某些特定于业务的转换后解析.xml并将其转换为.java文件(这些java文件将被构建为在最终jar中生成类和包)

下面是我在Gradle中编写的函数

private runJavaFile(String dirPath) {
    FileTree tree = fileTree(dir: dirPath, include: '**/*.xml')
    tree.each {
        def xmlfile = it.path
        def javaFile = it.path.replaceFirst(".xml", ".java")
        javaexec {  //// getting error on this line
            classpath configurations.all
            main = 'XmlToJavaParser'
            args = ["$xmlfile", "$javaFile", 'Java']
        }
    }
}
我通过传递包含要解析的xml文件的dir路径,从Gradle任务调用此函数。 运行任务时,我发现以下错误:

> Resolving configuration 'apiElements' directly is not allowed
任何帮助都将不胜感激。
如果需要更多信息,请告诉我。

在Gradle中,配置表示一组工件及其依赖项。根据您想要执行的操作,您通常有几个配置。例如,您可以在其中声明编译需要哪些依赖项,哪些仅在运行时需要,哪些运行特定Java应用程序需要

在您的例子中,您说的是
XmlToJavaParser
类的类路径是“所有配置的组合”,这没有什么意义。您也不允许这样做,因为Java插件中的某些配置无法像这样解析,这就是为什么会出现错误的原因

因此,要修复它,您应该声明自己的
XmlToJavaParser
配置。然后,您可以像往常一样为它声明依赖项。示例(使用Groovy DSL):


还有其他的方法。但主要的一点是不要使用
配置。所有
都作为类路径。

谢谢您的解决方案。我明白你的意思,并使用classpath=configurations.compile,这很有效!!
configurations {
    xmlJavaParser {
        canBeResolved = true
        canBeConsumed = false
    }
}

dependencies {
    xmlJavaParser "org.example:xml-java-parser:1.0" // or whatever you need
}

private runJavaFile(String dirPath) {
    // ...
    javaexec {
        classpath = configurations.xmlJavaParser // The configuration is referenced here
        main = 'XmlToJavaParser'
        args = ["$xmlfile", "$javaFile", 'Java']
    }
}