gradle javaexe c ошибка «'apiElements' напрямую не допускается» - Gradle 5.4.1 - PullRequest
1 голос
/ 05 августа 2020

Я новичок в Gradle и пытаюсь перенести существующую сборку системы с ant на Gradle. В рамках этого мне нужно запустить программу java для каждого файла в каталоге. Каталог содержит файлы xml, а код java проанализирует и преобразует файлы. xml в файлы. java (и эти файлы Java будут созданы для создания класса и пакета в окончательной банке) после выполнения некоторых бизнес-спецификаций. c преобразование.

ниже - это функция, которую я написал в 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']
        }
    }
}

Я вызываю эту функцию из задачи Gradle, передавая путь к каталогу, содержащий файлы xml, в быть проанализированным. Во время выполнения задачи я получаю сообщение об ошибке ниже:

> Resolving configuration 'apiElements' directly is not allowed

Любая помощь будет принята с благодарностью. Дайте мне знать, если потребуется дополнительная информация.

1 Ответ

1 голос
/ 05 августа 2020

В Gradle конфигурация представляет собой группу артефактов и их зависимости. Обычно у вас есть несколько конфигураций в зависимости от того, что вы хотите делать. Например, у вас может быть такой, в котором вы объявляете, какие зависимости необходимы для компиляции, какие нужны только во время выполнения или которые необходимы для запуска конкретного приложения Java.

В вашем случае вы говорите что путь к классу XmlToJavaParser - это «все конфигурации вместе», и это не имеет смысла. Вам также не разрешено это делать, поскольку некоторые конфигурации из плагина Java нельзя разрешить таким образом, поэтому вы получаете сообщение об ошибке.

Итак, чтобы исправить это, вы должны объявить свою собственную конфигурацию для XmlToJavaParser. Затем вы можете объявить для него зависимости, как обычно. Пример (с использованием Groovy DSL):

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']
    }
}

Есть и другие способы go об этом. Но главное - не использовать configurations.all в качестве пути к классам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...