标签: gradle-multi-project-build

为 Gradle 子项目配置 Kotlin 扩展

我正在为 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

12
推荐指数
1
解决办法
8446
查看次数

Gradle 多项目构建 - 如何处理本地 npm 项目依赖

该项目正在构建一个 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

5
推荐指数
0
解决办法
873
查看次数

如何使用 Gradle“平台”在多项目设置中对齐依赖版本?

我正在尝试学习如何使用“平台”来对齐多项目设置中项目之间的依赖版本。到目前为止,我已经看到:

  1. https://docs.gradle.org/6.2.1/userguide/platforms.html
  2. https://docs.gradle.org/6.2.1/userguide/dependency_management_terminology.html#sub::terminology_platform
  3. https://docs.gradle.org/6.2.1/userguide/dependency_version_alignment.html#sec:virtual_platform
  4. https://docs.gradle.org/6.2.1/userguide/dependency_constraints.html#sec:adding-constraints-transitive-deps
  5. https://docs.gradle.org/6.2.1/userguide/java_platform_plugin.html
  6. ……以及更多试图寻找示例的外部站点,例如 https://dzone.com/articles/gradle-goodness-use-bill-of-materials-bom-as-depen

我了解如何在项目中声明约束。我想我也了解如何为此目的使用 BOM。但是,我想为此使用一个“强制平台项目”,这里有很多事情我不明白:

  1. 我是否必须使用“java 平台”插件?我们有非 Java 项目。我们的配置不太适合“api”和“runtime”桶。
  2. 即使我们都是 Java,对于任何一个项目,我们也不能为其“api”和“运行时”提供单独的版本。虽然我确实了解这在某些情况下可能提供的控制级别,但我不明白这些是如何协同工作的,以确保项目获得指定的依赖项。
  3. Gradle 如何知道在使用平台的项目和平台规范之间匹配哪些配置的约束?我想我看到了平台中定义“api”和其他约束的示例,我“理解”项目将通过声明 api platform(project(':platform')) 来引用它。我希望 Gradle 不会试图通过简单的名称匹配来将“api”与“api”匹配。我需要多个不同的依赖配置,无论它被称为什么,都与同一个平台“配置”对齐。

总的来说,我没有找到足够的信息来对它的作用或工作方式充满信心。有人可以填写空白或指向一些显示比上述更多示例和详细信息的文档吗?目前我不明白我应该为那个平台项目(它的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

1
推荐指数
1
解决办法
2024
查看次数