Grails BuildConfig.groovy, разница между сборкой, компиляцией и временем выполнения?

Какая разница между build, runtime и compile, в BuildConfig.groovy (1.3.7)

grails.project.dependency.resolution = {

    plugins {
        build "acme:acme-cache:latest.integration"
    }

    dependencies {
        build "com.foo.bar:foobar:1.0.5"       
        runtime "org.apache.httpcomponents:httpclient:4.0.3"
        compile("com.thoughtworks.xstream:xstream:1.3.1")
    }
}

Ответ 1

  • build - зависимость, которая требуется только для процесса сборки
  • runtime - зависимость, необходимая для запуска приложения, но не скомпилировать его, например. JDBC для конкретного поставщика базы данных. Это обычно не требуется во время компиляции, потому что код зависит только от API JDBC, а не от конкретной реализации.
  • compile - зависимость, которая необходима как во время компиляции, так и во время выполнения. Это наиболее распространенный случай

Есть несколько других областей зависимости:

  • test - зависимость, которая требуется только для тестов, например. библиотека для издевательств/тестирования
  • provided - зависимость, которая необходима во время компиляции, но не должна быть упакована в приложение (обычно, поскольку она предоставляется контейнером). Например, Servlet API

Ответ 2

Кажется, что два предыдущих ответа противоречат различию между компиляцией и сборкой. Я считаю, что сборка - это область, которая включает grails compile и grails run-app, тогда как компиляция - это только первая.

Ответ 3

От Grails 3 зависимости управляются с помощью Gradle. Файл grails-app/conf/BuildConfig.groovy был заменен файлом build.gradle в корне проекта.

Руководство пользователя Grails объясняет, как установить привязки grails с помощью gradle и ссылается на связанная документация Gradle для получения более подробной информации об этой теме.

Ответ 4

Несколько команд grails помогают проиллюстрировать разницу. Рассмотрим grails run-app и grails compile. grails compile - это этап компиляции и будет включать зависимости времени компиляции. grails run-app - это шаг выполнения и будет включать зависимости от времени выполнения. Зависимости сборки - это все, что может потребоваться для запуска любой из этих команд, например, пользовательский script, который подключается к некоторым событиям сборки.

Итак, вы бы выбрали тот, который лучше всего подходит, когда вам нужно быть уверенным, что зависимость включена.