簡體   English   中英

如何使用 Gradle 6.3 將本地罐子包含到胖罐子中?

[英]How to include local jars into a fat jar using Gradle 6.3?

在運行 Java 8 和 Gradle 6.3 的 Linux 機器上,我需要構建一個由混合庫組成的胖 jar,一些來自 Maven Central,其他來自位於我的存儲庫根目錄的本地libs目錄,以及我的build.gradlegradlew

apply plugin: 'java'

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

task copyLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation "junit:junit:4.12"
}

運行./gradlew clean buildcd build/libs ,如果我unzip myproject.jar我可以看到 jar 中沒有包含任何依賴項。

我的最終目標是使我的項目可執行為java -jar myproject.jar 我該如何解決這個問題?

解壓 jar 文件后,請在此處檢查所有依賴項。

Your-Project --> BOOT-INF --> libs

by default, if your Gradle build is successful the jar files come here.

然后你可以運行 java -jar 。

這是一個build.gradle ,它生成一個包含本地依賴項的胖 jar:

plugins {
    id 'java'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

group 'com.mycompany.foo'
version '1.0'

jar {
    archiveBaseName = 'myjarname'
    archiveVersion = '0.1.0'
    manifest {
        attributes(
                'Main-Class': 'com.mycompany.foo.Main'
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    testImplementation'org.junit.jupiter:junit-jupiter-api:5.7.2'
    testImplementation 'org.assertj:assertj-core:3.20.2'
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM