При добавлении зависимостей в мой проект я никогда не уверен, какой префикс я должен им дать, например, "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'
}
java
gradle
dependencies
java123999
источник
источник
classpath
не является допустимой областью зависимости.compileOnly
зависимости идут,project.configurations.compileClasspath
но не вproject.configurations.compile
, как упоминалось здесь github.com/iboyko/gradle-plugins/issues/5Ответы:
Я собираюсь предположить, что вы ссылаетесь
compile
и находитесьclasspath
внутриdependencies {}
блока. Если это так, то это Конфигурации зависимостей .compile
Конфигурация создается с помощью плагина Java.classpath
Конфигурации обычно рассматриваются вbuildSrc {}
блоке , где нужно , чтобы объявить зависимости для build.gradle, сам (для плагин, возможно).источник
dependencies {}
Блок может быть объявлен как внутри , такbuildscript {}
и вне его. Находясь внутри, вы используетеclasspath
конфигурацию зависимостей, необходимую для компиляции самого скрипта сборки.Если самому buildscript нужно что-то запустить, используйте classpath .
Если вашему проекту нужно что-то запустить, используйте компиляцию .
buildscript{}
Блок для самого build.gradle.При построении нескольких проектов файл сборки верхнего уровня предназначен для корневого проекта, а конкретный файл сборки - для подпроекта (модуля).
Файл сборки верхнего уровня, в который вы можете добавить параметры конфигурации, общие для всех подпроектов / модулей.
Не помещайте зависимости вашего приложения в файл сборки верхнего уровня, они принадлежат отдельным файлам build.gradle модуля
источник
compile
а не aclasspath
?Если я правильно понимаю, вы путаете
Project.dependencies
блок сценария с блокомProject.buildscript.dependencies
сценария (как и я, когда дошел до этого вопроса).Я постараюсь ответить на это тем, что нашел.
Думаю, вы уже должны быть знакомы с
Project.dependencies
блоком скрипта. В этом блоке мы объявляем зависимости, которые требуются для нашего исходного кода. Есть несколько способов объявить зависимость, которая нам нужна для проекта. См. Учебное пособие по Gradle: Типы зависимостей . Я упомяну только ту часть, которая наиболее актуальна для этой проблемы:compile 'org.hibernate:hibernate-core:5.0.5.Final'
это объявление зависимости модуля. Конфигурация компиляции (которая теперь устарела конфигурацией реализации.) - это просто ключевое слово для него.Implementation only dependencies.
Это не ключевое слово, описывающее, какой тип зависимости это (здесь по типу я следую за тремя типами, определенными в учебнике, то есть модулем, файл и проект.)В Gradle Tutorial: Organizing Build Logic говорится:
Я надеюсь, что теперь вам все стало ясно.
Здесь
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'
мы объявляем зависимость модуля, необходимую для вашего проекта, с конфигурацией компиляции .ТЛ; Dr:
classpath
,compile
иimplementation
все ключевые слова , которые могут быть использованы против зависимостей при различных обстоятельствах. Первый используется, когда вы хотите передать зависимость сценарию сборки, а второй - это одна из конфигураций, которые вы, возможно, захотите объявить.источник
'org.projectlombok:lombok:1.18.4'
него нетclasspath
ассоциации, потому что это jar, который нужен только во время компиляции,javac
но не нужен воjava
время выполнения. Следовательно, правильное использование - это взаимодействие определенных ключевых слов и артефакта. Значит, нужны априорные знания.