Gradle构建的jar文件中没有显示依赖关系?

3
我正在使用这个build.grade文件。当我运行gradlew build时,它只生成一个带有源代码的jar文件,而不是libs文件夹中的stone.jar文件。我应该怎么做?

enter image description here

apply plugin: 'java'
apply plugin: 'eclipse'

// Source sets in the project, specify source directories
sourceSets {
    main {
        java.srcDir("${projectDir}/src/")
        resources.srcDir("${projectDir}/src/")
    }
}

// Dependencies for the project are stored in the libs directory
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

// Control what goes into the JAR
jar {

    manifest {
        attributes 'Main-Class': 'com.elsea.sublimelauncher.Driver'
    }

    // Include all the classes except the tests
    include("com/elsea/sublimelauncher/**")
}

你需要使用gradle shadow jar插件。你可以在网上找到它。 - undefined
为什么会这样呢?Gradle本身不能插入依赖吗?我对整个过程有点困惑。 - undefined
因为JAR默认不包含依赖项。而且从来没有包含过。 - undefined
1个回答

5
默认情况下,Gradle 中的 jar 任务可以从项目源代码构建可执行的 jar 文件,但不包含任何程序所需的传递库。这对于 Web 服务器来说很理想,因为它们通常会将所有 jar 放在一个特定的 lib 文件夹中。但对于许多独立程序而言并不好用。
你需要做的是创建一个“fat jar”,它将包含所有类和资源在一个单独的 jar 文件中。如果您使用的是 Maven,则可以看到类似 'my-program-v1.0-jar-with-dependcies.jar' 的文件。
Gradle 中有一个称之为 shadow plugin,可以完成同样的功能。GitHub 上的 Wiki 包含了关于如何在您的项目中使用此插件的所有信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接