Скомпилируйте скрипт groovy со всеми его зависимостями, которые управляются gradle, а затем запустите его как отдельное приложение через командную строку
У меня есть простой Groovy скрипт с одной зависимостью библиотеки Java:
package com.mrhacki.myApp
import me.tongfei.progressbar.ProgressBar
class Loading {
static void main(String[] arguments) {
List list = ["file1", "file2", "file3"]
for (String x : ProgressBar.wrap(list, "TaskName")) {
println(x)
}
}
}
Я использую Gradle для управления зависимостями проекта. Конфигурация gradle для проекта также довольно проста:
plugins {
id 'groovy'
}
group 'com.mrhacki'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.3.11'
compile 'me.tongfei:progressbar:0.7.2'
}
Если я запускаю сценарий из Intellij IDE, сценарий выполняется должным образом.
Теперь я хотел бы скомпилировать сценарий с этой зависимостью в один файл.jar, чтобы я мог распространять его как таковой и запускать приложение из любого пути файловой системы, поскольку логика сценария будет зависеть от пути из который казнь была названа.
Я пробовал с несколькими примерами толстых банок, но ни один из них не работал, так как файл.jar постоянно выдает Could not find or load main class Loading
когда я пытаюсь это запустить.
Если бы кто-то был так любезен, чтобы дать подсказку или показать пример задачи, которая могла бы выполнить сборку, которая соответствует моим описанным потребностям, я был бы очень благодарен.
Я знаю о заводной модуль Grape с @Grab
аннотации тоже, но я бы оставил это в качестве крайней меры, так как я не хочу, чтобы пользователи ждали загрузки зависимостей, и хотел бы связать их с приложением.
Я использую Groovy 2.5.6 и Gradle 4.10 для проекта
Спасибо
1 ответ
Вы можете просто создать флягу без каких-либо дополнительных плагинов, используя jar
Задача. Для простого / маленького проекта, подобного вашему, это должно быть просто:
jar {
manifest {
// required attribute "Main-Class"
attributes "Main-Class": "com.mrhacki.myApp.Loading"
}
// collect (and unzip) dependencies into the fat jar
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
РЕДАКТИРОВАТЬ: пожалуйста, примите во внимание другие комментарии: если у вас есть более одной внешней библиотеки, у вас могут быть проблемы с этим решением, так что вам следует искать решение с "теневыми" плагинами в этом случае.