Как собрать несколько java-файлов в один jar-файл с помощью java-плагина gradle?
Я хочу скомпилировать несколько файлов Java в один файл JAR с Gradle.
Цель состоит в том, чтобы добавить их в банку и проверить зависимости тестов.
Maven должен интегрировать библиотеку junit.
Я также хочу применить какой-то фильтр для проверки только файлов с *Tests.java
build.gradle
файл находится в том же каталоге, что и src
папка.
Моя файловая структура (папки или имена файлов не могут быть изменены):
src/eu/conflicts/Conflicts.java
src/eu/conflicts/ConflictsTests.java
src/eu/utils/BuggyUtils.java
src/eu/utils/BuggyUtilsTests.java
После запуска gradle -b build.gradle jar
Я получил сообщение об ошибке: Could not find the main method
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.12'
}
sourceSets {
main {
conflicts {
srcDir = 'src/eu/conflicts'
}
utils {
srcDir = 'src/eu/utils'
}
}
test {
conflicts {
srcDir = 'src/eu/conflicts'
}
utils {
srcDir = 'src/eu/utils'
}
}
}
jar {
baseName = 'xy'
version = '0.1'
manifest {
attributes("Implementation-Title": "xy",
"Implementation-Version": 0.1)
}
}
2 ответа
Ваше определение наборов источников неверно. Плагин Java поддерживает только java
а также resources
типы источников в исходном наборе. Каждый исходный набор может иметь произвольное имя. Если вы назовете свой исходный набор main
он будет настраивать тот, который используется соглашением задачей jar. Так:
apply plugin: 'java'
sourceSets {
main {
java {
srcDir 'src'
exclude '**/*Tests.java'
}
}
test {
java {
srcDir 'src'
include '**/*Tests.java'
}
}
}
Ваши исходные наборы кажутся неверными, и вам не нужно вносить поправки в задачу jar, если вас не беспокоит строящийся артефакт.
Для запуска всех тестов и компиляции ваших файлов вам просто нужно запустить
build
задача, это зависит отassemble
а такжеcheck
который зависит от других задач, таких какtest
,compile
и т. д. Чтобы использовать его вам нужноapply plugin: 'java'
,Gradle создаст один артефакт (если вы используете задачу сборки), компилируя все, что вы хотите, по умолчанию упаковывая ваши основные источники в банку без тестовых источников.
Gradle собирается запустить все тесты в исходных текстах тестов (с использованием тестовой задачи, связанной с задачей сборки), обнаруженных с помощью аннотаций.
Вы можете изменить все это, используя SourceSets{} в вашем скрипте, чтобы указывать на структуры не по умолчанию
Попробуйте возможно это:
sourceSets {
main.java{
srcDirs = ['src/eu/conflicts', 'src/eu/utils']
include '**/*.java'
}
test.java{
srcDirs = ['src/eu/conflicts', 'src/eu/utils']
include '**/*Tests.java'
}
}