Как запустить отличный скрипт из gradle, который зависит от другого скрипта - PullRequest
1 голос
/ 05 января 2012

Я играю с каталогом примеров, который поставляется с Gradle, и пытаюсь создать простую задачу, которая запускает отличный сценарий, который зависит от другого сценария.

Структура проекта выглядит следующим образом:

.
├── build.gradle
└── src
    ├── main
    │   ├── groovy
    │   │   └── org
    │   │       └── gradle
    │   │           └── Person.groovy
    │   └── resources
    │       ├── resource.txt
    │       └── script.groovy
    └── test
        ├── groovy
        │   └── org
        │       └── gradle
        │           └── PersonTest.groovy
        └── resources
            ├── testResource.txt
            └── testScript.groovy

Я добавил следующее задание в build.gradle

task runScript << {
  new GroovyShell().run(file('src/main/resources/script.groovy'))
}

Я получаю ошибку:

FAILURE: Build failed with an exception.

* Where:
Build file '/gradle/gradle-1.0/samples/groovy/quickstart/build.gradle' line: 13

* What went wrong:
Execution failed for task ':runScript'.
Cause: No such property: person for class: script

Содержимое script.groovy:

person.name = person.name[0].toUpperCase() + person.name[1..-1]

Содержимое Person.groovy: пакет орг.град

class Person {
    String name

    def Person() {
        getClass().getResourceAsStream('/resource.txt').withStream {InputStream str ->
            name = str.text.trim()
        }
        getClass().getResourceAsStream('/script.groovy').withStream {InputStream str ->
            def shell = new GroovyShell()
            shell.person = this
            shell.evaluate(str.text)
        }
    }
}

Вопрос Как добавить задачу, которая будет просто запускать script.groovy, которая использует другой класс Groovy (Person)

1 Ответ

0 голосов
/ 24 августа 2012

Вы можете использовать папку buildSrc, в которой можно хранить Groovy / Java исходные коды, которые будут скомпилированы перед выполнением любой задачи в исходном сценарии сборки и добавлены в путь к классам.Это сделает все эти классы доступными для использования в задачах.Вы можете прочитать больше об этом в: http://gradle.org/docs/current/userguide/organizing_build_logic.html

Относительно вашего script.grooovy Я бы просто поместил код в саму задачу, а не вызывал ее через GroovyShell.Если вы хотите выполнить задачу извне, вы можете использовать команду apply.

apply from: 'script.gradle'

Вы можете взглянуть на этот вопрос: Как я могу импортировать один скрипт Gradle в другой?

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