gpt4 book ai didi

Gradle java-library 插件与 java 插件的比较

转载 作者:行者123 更新时间:2023-12-04 04:15:15 33 4
gpt4 key购买 nike

java-library plugin 的 Gradle 文档中它指出:

The Java Library plugin expands the capabilities of the Java plugin by providing specific knowledge about Java libraries. In particular, a Java library exposes an API to consumers (i.e., other projects using the Java or the Java Library plugin)



该语句意味着只有打算使用的 java 程序(库)才应该使用 java-library插入;同时,不打算使用的 java 程序(应用程序)应该使用 java插入。

在使用 java-library 之前插件一个根 build.gradle文件可能包含以下内容:
subprojects {
apply plugin: 'java'
sourceCompatibility '1.8'
targetCompatibility '1.8'

// other common java stuff
}

但是,现在在同时具有应用程序和库的多模块项目中,您不能将插件选择委托(delegate)给子项目并具有以下根 build.gradle :
subprojects {
sourceCompatibility '1.8'
targetCompatibility '1.8'

// other common java stuff
}

这将失败,因为 sourceCompatibilitytargetCompatibilityjava 定义和 java-library插件。理想情况下,我想做以下事情:
subprojects {
apply plugin: 'java-library'
sourceCompatibility '1.8'
targetCompatibility '1.8'

// other common java stuff
}

是否有任何理由强制 Java 应用程序使用 java插件和 java 库使用 java-library插入? java 有什么原因吗?应该使用插件而不是 java-library插入?

编辑

为了进一步澄清我的问题,在 Gradle 示例中有一个多模块项目,用于 java插件 here对于 java-library插件 here .在 java 的示例中插件,根 build.grade 使用 apply plugin: 'java' . java-library 的根 build.gradle plugin 不使用任何插件。该应用项目使用 apply plugin: 'java' ;而 core 和 utils 项目使用 apply plugin: 'java-library' .

我的问题是为什么有些项目应该使用 java插件和其他人使用 java-library插入?它似乎使不违反 DRY 原则变得更加困难。我很难指定 sourceCompatibilitytargetCompatibility只有一次。我可以想到几种方法来指定这些属性一次,但最简单的解决方案似乎是使用 java-library对于所有项目。

使用 java 有什么好处吗?一些子项目的插件和 java-library别人的插件?

最佳答案

根据docs

[...] the Java Library plugin is only wired to behave correctly with the java plugin.



因此,如果您将这两个插件都应用到一个项目中,您应该不会遇到任何问题。例如。您可以申请 java通过 subprojects 为每个项目添加插件关闭并稍后应用 java-library插件到那些需要插件附加功能的子项目(通过他们的 build.gradle文件)。

请注意,您可以通过 withPlugin 指定依赖于插件的配置。 PluginManager 的方法或 withId PluginContainer 的方法.对于这两种方法都适用:

If the plugin was already applied, the action is executed. If the plugin is applied sometime later the action will be executed after the plugin is applied. If the plugin is never applied, the action is never executed.


subprojects { sub ->
sub.plugins.withId('java-library') {
// configure sub
}
}

关于Gradle java-library 插件与 java 插件的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617018/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com