Скомпилируйте скрипт groovy со всеми его зависимостями, которые управляются gradle, а затем запустите его как отдельное приложение через командную строку - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть простой 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, когда я пытаюсь его запустить.

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

Я знаю о Groovy-модуле Grape с аннотацией @Grab, но я бы оставил это в качестве крайней меры, поскольку я не хочу, чтобы пользователи ждали загрузки зависимостей, и хотел бычтобы связать их с приложением.

Я использую Groovy 2.5.6 и Gradle 4.10 для проекта

Спасибо

1 Ответ

0 голосов
/ 24 февраля 2019

Вы можете просто создать fat-jar самостоятельно, без каких-либо дополнительных плагинов, используя задачу 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) 
        }
    }
}

РЕДАКТИРОВАТЬ: просьбы принять во внимание другие комментарии: если у вас более одной внешней библиотеки, у вас могут возникнуть проблемы с этим решением, поэтому выВ этом случае следует искать решение с помощью «теневых» плагинов.

...