Подтвердить что ты не робот

Gradle: В чем разница между зависимостями classpath и компиляции?

При добавлении зависимостей к моему проекту я никогда не сомневаюсь, какой префикс я должен дать им, например. "classpath" или "compile".

Например, должны ли мои зависимости ниже компилировать время или путь к классам?

Кроме того, должно ли это быть в моих приложениях build.gradle или в конкретном модуле build.gradle?

Текущий build.gradle(на уровне приложения):

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.hibernate:hibernate-core:5.0.5.Final'
    compile 'mysql:mysql-connector-java:5.1.38'
} 
4b9b3361

Ответ 1

Я собираюсь предположить, что вы ссылаетесь на compile и classpath в блоке dependencies {}. Если это так, это зависимость Конфигурации.

Конфигурация - это просто именованный набор зависимостей.

Конфигурация compile создается плагином Java. Конфигурация classpath обычно рассматривается в блоке buildSrc {}, где нужно объявлять зависимости для build.gradle, сам (для плагинов, возможно).

Ответ 2

Если самому buildscript нужно что-то запустить, используйте classpath.

Если вашему проекту нужно что-то запустить, используйте compile.

Блок buildscript{} предназначен для самого build.gradle.

Для многоуровневой сборки файл сборки верхнего уровня предназначен для корневого проекта, конкретный файл сборки - для подпроекта (модуля).

Файл сборки верхнего уровня, в который вы можете добавить параметры конфигурации, общие для всех подпроектов/модулей.

Не размещайте зависимости приложения в файле сборки верхнего уровня, они принадлежат отдельным файлам build.gradle модуля

Ответ 3

Если я правильно понимаю, вы Project.dependencies блок скрипта Project.dependencies со блоком скрипта Project.buildscript.dependencies (точно так же, как я делал, когда достигал этого вопроса).

Я постараюсь ответить на это с тем, что я нашел.

Я думаю, что вы должны быть уже знакомы с блоком сценария Project.dependencies. В этом блоке мы объявляем зависимости, требуемые нашим исходным кодом. Есть несколько способов объявить зависимость, которая нам нужна для проекта. Смотрите Gradle Tutorial: Типы зависимостей. Я упомяну только ту часть, которая наиболее актуальна для этой проблемы:

compile 'org.hibernate:hibernate-core:5.0.5.Final' - это объявление зависимости модуля. Конфигурация компиляции (которая в настоящее время устарела из-за конфигурации реализации) является просто ключевым словом для Implementation only dependencies. для Implementation only dependencies. Это не ключевое слово, описывающее, какой это тип зависимости (по типу здесь я следую трем типам, определенным в учебном пособии, т.е. Модуль, файл и проект).

В Gradle Tutorial: Organizing Build Logic написано:

Если вашему сценарию сборки необходимо использовать внешние библиотеки, вы можете добавить их в путь к сценариям в самом сценарии сборки. Вы делаете это, используя метод buildscript(), передавая замыкание, которое объявляет путь к классу сценария сборки.

Это так же, как вы объявляете, например, путь к классу компиляции Java. Вы можете использовать любой из типов зависимостей, описанных в Типах зависимостей, кроме проектных зависимостей.

Объявив путь к классам сценария сборки, вы можете использовать классы в вашем сценарии сборки так же, как и любые другие классы в пути к классам.

Я надеюсь, что теперь все становится ясно.

Используя classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}" мы устанавливаем метод classpath с помощью com.android.tools.build:gradle:${Versions.android_gradle_plugin} который является зависимостью модуля, которая является используется самим сценарием сборки, а не источником в вашем проекте.

С другой стороны, при compile 'org.hibernate:hibernate-core:5.0.5.Final' мы объявляем зависимость модуля, необходимую для вашего проекта с конфигурацией компиляции.

tl; dr: classpath, compile и implementation - все ключевые слова, которые могут использоваться против зависимостей при различных обстоятельствах. Первый используется, когда вы хотите передать зависимость в сценарий сборки, а второй является одной из конфигураций, которые вы можете объявить.