在gradle构建之后,依赖项会发生什么?

时间:2017-10-03 18:25:44

标签: gradle

我正在尝试使用Gradle,并且想知道,在运行gradle build之后,项目的依赖项会发生什么?例如,我的示例项目在构建后不会在命令行上运行,因为它们缺少依赖项。它们似乎编译得很好,因为gradle没有给我关于找到依赖项的错误或警告。

我在IntelliJ Idea中制作的Gradle项目也有同样的问题。它们在IDE中编译和运行,但缺少依赖项,无法在命令行上运行。

那么我在build.gradle文件中声明的依赖项会发生什么?它们不应该与我的.class文件一起输出吗?否则,当我通过编辑我的类路径来管理它时,有什么重点?

编辑:这是我的build.gradle文件:

apply plugin: 'java'

jar {
    manifest {
        attributes('Main-Class': 'Animals')
    }
}

repositories {
    flatDir{
        dirs "D:\\libs\\gradleRepo"
    }
}

dependencies {
    compile name: "AnimalTypes-1.0-SNAPSHOT"
}

sourceSets{
    main{
        java {
            srcDirs=['src']
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的Gradle构建只负责编译时间并允许您在代码中使用指定的依赖项(它将它们添加到编译类路径中)。但它没有关注运行时。构建JAR后,您需要指定运行时类路径并提供所有必需的依赖项。

您可能认为,这是坏的或不利的,但实际上它是完全正常的,因为如果您构建Java库,您不需要执行它,您只想将其指定为另一个项目的依赖项。如果要将库分发到Maven存储库,Maven存储库中的所有依赖项(模块依赖项)将最终作为传递依赖项存在于POM描述符中。

现在,如果要构建可运行的Java应用程序,只需使用Gradle Application Plugin(apply plugin: 'application'),它将创建一个包含依赖项的ZIP文件,并启动脚本,提供运行时类路径以供执行。

第三方插件也可以生成所谓的胖JAR,它们是包含所有依赖项的JAR文件。如果您应该使用它,这取决于您的用例,因为通常通过存储库进行依赖管理是更好的方法。