首页 > 解决方案 > 从 gradle 开始:目录结构

问题描述

我是 gradle 的初学者,我需要帮助。如果我想要我自己的库和外部库(供应商),我应该把这些库(外部和个人)放在哪里?感谢您的帮助 !

(例如:我当前目录结构的截图) 在此处输入图像描述

标签: gradle

解决方案


Gradle 为此提供了一些不同的选项。

在所有情况下,本地文件依赖项都没有固定的文件夹结构,您可以自由选择自己喜欢的。libs对我来说似乎很好。

以下所有示例都在 Groovy DSL 中。有关 Kotlin DSL 变体,请参阅 Gradle 用户指南。

文件依赖

要从本地文件夹添加依赖项,您可以使用Project.file()Project.fileTree()方法。两者都采用相对于项目目录解析的路径。

dependencies {
    implementation files('libs/a.jar')                  // Single file
    implementation files('libs/b.jar', 'libs/c.jar')    // Multiple files
    implementation fileTree('libs')                     // All files in a folder
    implementation fileTree('libs') { include '*.jar' } // All jar files in a folder
}

有关详细信息,请参阅用户指南中的文件依赖项。

平面目录存储库

您还可以声明一个平面目录存储库。这里的路径是相对于您调用 Gradle 的位置,因此为了使其保持一致,您应该使其成为绝对路径(使用projectDiror rootDir)。

repositories {
    flatDir name: 'local-libs', dirs: "$projectDir/libs" // The name is optional
}

然后,您可以使用具有组、名称和版本的正常格式来声明依赖项。但是,由于 group 被忽略,因此您可以编写任何您喜欢的内容,也可以将其省略:

dependencies {
    implementation 'mysql:mysql-connector-java:5.1.49' // Real Maven coordinates
    implementation ':mysql-connector-java:5.1.49'      // Short-hand for local coordinates
}

有关详细信息,请参阅本节

Maven 存储库和单独的 Gradle 项目

由于上述两种方法不包含模块元数据,这意味着您必须手动定义和包含所有传递依赖项,因此维护起来很快就会变得很麻烦。

如果可能,请尝试使用 Maven 存储库。特别是对于第三方依赖项。如果您不能使用 Maven Central 或 JCenter 等远程文件,您甚至可以定义一个本地存储库以利用元数据文件(例如.pomfiles 或)。.module

当依赖于其他 Gradle 项目时,如果它们是相关的,您可以将它们构建为一个多项目,而不是构建并将它们放入“libs”文件夹中。

如果它们不相关,您也可以将它们发布到 Maven 存储库(本地或远程),或者您可以查看复合构建,尽管这是一个高级主题。

关于 MySQL 连接器软件许可证的说明

最后,如果您不知道,MySQL Connector/J 版本 5.x 的社区版是在 GPL v2 下获得许可的。这意味着您自己的应用程序也需要在 GPL v2 下获得许可。

像 8.x(我不确定 6 和 7)这样的更高版本在 GPL v2 下获得双重许可,但有一个名为The Universal FOSS Exception的规定,允许您在自己的应用程序中链接和使用该库,而不会影响您自己的许可。

如果这只是一个爱好项目,那么如果您违反了许可证,没有人会知道您的门。但是,如果是针对公司的,请小心,否则您可能会遇到法律麻烦。甲骨文会不时进行审计,他们不会让机会溜走,以高额的许可费打你一巴掌。


推荐阅读