我已经使用Gradle有一段时间了,但从未深入研究过它的许多特性和功能,但前几天我决定将Java项目分成两个模块,以便于测试和维护。完成后,我开始阅读创作多项目和一个新的Gradle概念,称为复合构建。然后,我花了一天的大部分时间尝试将这些知识应用于(我认为我理解的)项目模块化。可以放心地假设我没有成功,现在我在这里寻求帮助来理解这些概念及其应用。
假设我们有以下目录结构:
toolbox
|
├── first-tool
| └── build.gradle
|
├── second-tool
| └── build.gradle
|
├── build.gradle
└── settings.gradle
这些是根目录中的项目:
Root project 'toolbox'
+--- Project ':first-tool'
\--- Project ':second-tool'
让我们使项目第一工具
引入一个外部依赖项org.master工具箱:some.other.tool
第二个工具箱依赖于它但不实现它自己:
default - Configuration for default artifacts.
+--- org.master-toolbox:some.other.tool:1.0
| +--- ...
\--- io.toolbox:first-tool
这些是相关的Gradle文件:
settings.gradle
rootProject.name = 'toolbox'
include 'first-tool', 'second-tool'
工具箱.build.gradle
allprojects {
apply plugin: 'java-library'
group = "io.toolbox"
repositories {
jcenter()
}
}
第一个工具.build.gradle
dependencies {
// This is an external dependency that is resolved through jcentral
implements 'org.master-toolbox:some.other.tool:1.0'
}
second-tool.build.gradle
dependencies {
// Try to implement first-tool build to inherit dependencies
implementation 'io.toolbox:first-tool'
}
上面生成了一个很好的项目结构,如上所示,但无法完全工作,因为第二个
工具找不到第一个工具
,并且类似于以下错误的内容会出现在我们的控制台中:
> Could not resolve all files for configuration ':second-tool:compileClasspath'.
> Could not find io.toolbox:first-tool:.
Required by:
project :second-tool
现在,据我所知,这就是复合构建应该出现的地方,通过允许我们包含整个构建来节省时间。听起来不错,让我们更新一下<code>设置。gradle</code>:
rootProject.name = 'toolbox'
includeBuild `first-tool`
include 'second-tool'
现在项目构建和编译正确,一切都很好吧?不完全是,因为在我们的设置中使用includeBuild
关键字.gradle
第一个工具
不再从工具箱继承属性,并且基本上不再是工具箱
的子项目。
我很可能误解了复合构建的整个概念,或者只是犯了愚蠢的错误。无论哪种方式,我想知道的是,是否有任何方法可以使子项目相互依赖的分层多项目结构?
就目前而言,我必须在以下选项之间进行选择:
如果能有一个main<code>构建,那就太好了。gradle,它位于顶级项目的根目录中,并为整个层次结构定义通用插件、存储库、组等。其他项目将拥有自己的构建。gradle
文件,该文件将为它们提供唯一的属性,但将从顶级项目执行它们的任务。
我已经阅读了关于这个主题的官方文件,所以我正在寻找关于如何实现这个具体目标的更具体的解释和指导。
使用多模块构建,一个模块可以依赖于另一个模块。要让第二个项目依赖于第一个项目,请将第二个工具/build.gradle
编辑为:
dependencies {
implementation project(':first-tool')
}
此外,第一个模块可能应该是:
dependencies {
api 'org.master-toolbox:some.other.tool:1.0'
}
您可以使用多模块构建来执行您所描述的操作;您可以具有模块间依赖关系,并且可以使用all项目{…}
或子项目{…}
从顶层构建配置模块。
复合构建很少使用——如果你喜欢“单一的”构建,并且不需要将你的代码分成不同的repos。等等。,然后选择(简单的)多模块构建。
我有多个java项目。这些项目正在使用Gradle创建jar、war和ear文件。在每个项目中,我都使用清单文件来维护元数据,如版本、日期-时间...为此,我在每个build.gradle文件中都包含了清单文件创建逻辑。 但在Gradle中有一个特性调用SharedManifest。我在主项目build.gradle脚本中定义了以下两个任务。但是在每个jar和war文件中都有gradle创建的默认
我使用的是Eclipse BuildshipV2.1.2用于Gradle。我有两个独立的web项目,P1和P2,还有一个项目,P3,它作为所有其他项目的依赖项。我的任务是创建一个主构建,用它可以从P1和P2构建和生成WAR文件,并从P3生成JAR文件。我应该包含这个P3 jar文件作为P1和P2的依赖项。我创建了一个, null P2 Build.Gradle settings.gradle Bu
给予 这在gradle 1.3中无法正常工作。(即,子项目包含所有依赖项) 这是一个bug还是有不同的语法来排除项目依赖关系?
我有一个库,我称之为,它是另一个项目的依赖项,名为。在的构建中。gradle,我正在使用,它以如下方式指定为依赖项: 这很有效-已编译。但是,当我在我的项目中使用它时,我得到了以下内容: <code>生成。的gradle如下所示: 可能这是因为库在,但它没有正确的位置来搜索Maven存储库。有没有一种方法可以使这些搜索位置以及依赖关系本身变得短暂?
我在代理“客户”群体中用Anylogic创建了一个时间表,客户必须创建订单并将其发送到“终端”。每天,每个客户必须发送到终端的订单量都是不同的。我想一次创建多个订单(每天,即计划中的开始列),我想创建的金额是计划中的值列。如何做到这一点? 正如您在下面看到的,现在每天只创建一个订单(以金额为参数),但我想在那一天/那一刻创建这个订单量。谢谢您的帮助! 日程数据如下所示:
考虑这个例子 我有一个函数,它以作为输入,并返回三个值,我想存储到三个不同的变量。下面的似乎工作正确 然而,当我试图创建相应的变量时,我得到了一个错误 你怎么认为? 我曾经在pandas apply()的返回多列中使用伟大的解决方案,但在当前的pandas中,此解决方案不再有效 谢谢!