我正在为 JVM 设置一个基于 Kotlin 的多模块 Gradle 项目。由于根项目不包含任何代码,因此 Kotlin 插件只能应用于子项目。
build.gradle.kts(根项目)
plugins {
kotlin("jvm") version "1.6.20" apply false
}
subprojects {
apply(plugin = "kotlin")
group = "com.example"
repositories {
mavenCentral()
}
dependencies {}
kotlin {
jvmToolchain {
check(this is JavaToolchainSpec)
languageVersion.set(JavaLanguageVersion.of(11))
}
}
}
Run Code Online (Sandbox Code Playgroud)
尝试设置工具链会导致构建在kotlin {...}扩展处失败:
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public fun DependencyHandler.kotlin(module: String, version: String? = ...): Any defined in org.gradle.kotlin.dsl
public fun PluginDependenciesSpec.kotlin(module: String): PluginDependencySpec defined …Run Code Online (Sandbox Code Playgroud) gradle kotlin gradle-kotlin-dsl gradle-multi-project-build kotlin-gradle-plugin
该项目正在构建一个 Angular 应用程序。
我需要应用程序构建来使用另一个本地项目的结果,该项目是一个 javascript 库。
Gradle 用于在 com.github.node-gradle.node 节点插件的帮助下构建这两个项目。
项目结构很简单
root
- Project App
- Project Library
Run Code Online (Sandbox Code Playgroud)
其中 App 取决于 Library 的输出。
更准确地说,应用程序需要项目库上“npm pack”的输出。
在 App 项目中,我声明了对库项目的本地 npm 依赖,这是 npm pack 的结果。(.tgz 文件)
"dependencies": {
"library": "file:../library/build/library-0.0.1.tgz"
}
Run Code Online (Sandbox Code Playgroud)
如何将库项目的结果声明为构建输出并将其声明为应用程序项目的依赖项输入?
使用 java-library 插件,它会是这样的:
dependencies {
api(project(":library"))
}
Run Code Online (Sandbox Code Playgroud)
目标是 gradle 将首先构建 Library 项目,然后再构建 App 项目。如果他在请求构建 App 时能够检查库源代码是否已更改或不触发构建,那就更好了。
在两个项目上构建都是这样完成的:
tasks{
register<com.moowork.gradle.node.npm.NpmTask>("build") {
dependsOn("npmInstall")
setArgs(setOf("run-script", "build"))
}
}
Run Code Online (Sandbox Code Playgroud)
package.json 中库项目的构建脚本是
"scripts": {
"build": "ng-packagr -p ng-package.json && cd ./build && npm pack ../dist" …Run Code Online (Sandbox Code Playgroud) node.js npm build.gradle gradle-multi-project-build gradle-kts
我正在尝试学习如何使用“平台”来对齐多项目设置中项目之间的依赖版本。到目前为止,我已经看到:
我了解如何在项目中声明约束。我想我也了解如何为此目的使用 BOM。但是,我想为此使用一个“强制平台项目”,这里有很多事情我不明白:
总的来说,我没有找到足够的信息来对它的作用或工作方式充满信心。有人可以填写空白或指向一些显示比上述更多示例和详细信息的文档吗?目前我不明白我应该为那个平台项目(它的build.gradle)实际写什么和/或我将如何从我们拥有的当前项目中正确引用它。
谢谢!
更新 1:在https://discuss.gradle.org/t/can-someone-tell-me-what-i-am-doing-wrong-to- 上发布了一个最小的实验来测试我(缺乏)对此的理解align-dependency-versions-across-projects/35601 ...
gradle gradle-dependencies gradle-multi-project-build gradle-groovy-dsl