Gradle: включить внешнюю библиотеку без извлечения файлов библиотеки Jar - PullRequest
0 голосов
/ 19 марта 2020

Я пытался гуглить тут и там, изучая, что такое groovy язык, читая учебник о gradle, просматривая видео YouTube о gradle, но все же трудно отладить, что может и не может сделать gradle. Какую переменную или метод вы можете использовать, чтобы сделать «это» и «сделать». Все, что я нашел на веб-сайте Gradle, похоже на прикрытие для базового c использования.

ЦЕЛЬ: Я хочу скомпилировать мою java банку, НО с внешней библиотекой, не извлекая ее в мою банку и поместите в папку "libs" внутри моего JAR , и без изменения структуры папки моего проекта.

Здесь структура моего проекта:

Project Structure

Я успешно создал файл jar, но выглядело это так:

JAR Structure That I Got

Извлечение всей моей внешней библиотеки внутри моего файла jar (папка com, javafx, org, со множеством файлов дубликатов, таких как about.html et c)

Что я действительно хочу, так это создать "толстый кувшин", например: https://dzone.com/articles/java-8-how-to-create-executable-fatjar-without-ide без извлечения библиотеки .jar file

Вот мой build.gradle:

apply plugin: 'java'

sourceCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

// NetBeans will automatically add "run" and "debug" tasks relying on the
// "mainClass" property. You may however define the property prior executing
// tasks by passing a "-PmainClass=<QUALIFIED_CLASS_NAME>" argument.
//
// Note however, that you may define your own "run" and "debug" task if you
// prefer. In this case NetBeans will not add these tasks but you may rely on
// your own implementation.
if (!hasProperty('mainClass')) {
    ext.mainClass = 'Main'
}

sourceSets {
  main {
    java {
        srcDirs "src/main/java"
    }
    resources {
        srcDirs = ["src/main/resources"]
        exclude "**/*.java"
    }
  }
}

repositories {
    mavenCentral()
    // You may define additional repositories, or even remove "mavenCentral()".
    // Read more about repositories here:
    //   http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:repositories
    flatDir {
       dirs 'libs'
    }
}

dependencies {
    // TODO: Add dependencies here ...
    // You can read more about how to add dependency here:
    //   http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:how_to_declare_your_dependencies
    testCompile group: 'junit', name: 'junit', version: '4.10'

    // https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-server
    compile group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.4.15.v20190215'

    // https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-servlet
    compile group: 'org.eclipse.jetty', name: 'jetty-servlet', version: '9.4.15.v20190215'

    // https://mvnrepository.com/artifact/org.eclipse.jetty.websocket/websocket-server
    compile group: 'org.eclipse.jetty.websocket', name: 'websocket-server', version: '9.4.15.v20190215'

    // https://mvnrepository.com/artifact/org.eclipse.jetty.websocket/websocket-servlet
    compile group: 'org.eclipse.jetty.websocket', name: 'websocket-servlet', version: '9.4.15.v20190215'

    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    compile group: 'com.google.code.gson', name: 'gson', version: '2.7'

    compile 'org.json:json:20180813'
    compile name: 'dpuareu'
}

jar {
    from configurations.compile.collect{ zipTree it }

    manifest.attributes 'Main-class': 'Main'
}

task runJar(type: JavaExec, dependsOn:jar) {
    main = "-jar";
    args jar.archivePath
}

//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest.attributes 'Main-class': 'Main'

    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

task testPrint {
    doLast {
        print jar.archivePath
    }
}

Я действительно новичок в Gradle и хочу знать, как создавать и настраивать с учетом моих потребностей. Вот мой вопрос:

  1. Как заархивировать мою цель?
  2. Как научиться шаг за шагом учиться? Какой из них мне следует сначала изучить?
  3. Как отладить или узнать, что это за объект, например configurations. Откуда это? Что такое configurations.compile "compile"? Где я могу найти документацию об этом? И так много ключевых слов, которые действительно полезны при создании файла сборки Gradle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...