AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[gradle](coding)

Martin Hope
tutuna faltu
Asked: 2025-04-08 17:01:21 +0800 CST

gradle 中的 mainClass 变量来自哪里?

  • 5
plugins {
id 'java'
id 'application'
}
application {
mainClass = "org.example.Main"
}
group = 'org.example'
version = '1.0-SNAPSHOT'

repositories {
mavenCentral()
}

dependencies {
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
implementation project(":api")
}

test {
useJUnitPlatform()
}

代码没有问题,但我知道所有已定义的变量都来自项目对象

mainClass 变量来自插件应用程序,但为什么我只能在应用程序块中分配该变量,而不能在其他任何地方分配?这个变量来自哪个类?

gradle
  • 1 个回答
  • 16 Views
Martin Hope
satanmoo
Asked: 2025-02-13 15:54:36 +0800 CST

Gradle 的类型安全访问器到底是什么,它们与依赖管理有何关系?

  • 5

我正在尝试理解Gradle 文档中关于版本目录的“类型安全访问器”的概念。文档指出,Gradle 从目录中生成类型安全访问器,然后在添加依赖项时启用 IDE 自动完成。

但是,我对以下几点感到有点困惑:

  1. 定义:在这种情况下类型安全访问器到底是什么?

  2. 使用时间:这些访问器是作为编译时数据生成的,还是主要由 IDE 使用来提供自动完成建议?

  3. 在依赖管理中的作用:类型安全访问器如何与依赖管理交互?例如,与手动输入依赖字符串相比,它们如何防止错误?

我正在寻找有关类型安全访问器是什么、如何生成它们以及它们如何在 Gradle 的依赖管理工作流中发挥作用的详细解释。

如能提供任何澄清或示例,我们将不胜感激!

gradle
  • 1 个回答
  • 21 Views
Martin Hope
Biggy Poopa
Asked: 2024-12-17 17:40:34 +0800 CST

保存文件时触发自定义生成器

  • 5

我正在使用 Quarkus 和 Gradle(不带 Kotlin)作为构建工具。

在我的项目中,有一些类包含一些信息,我的自定义生成器会使用这些信息来生成一些自定义类。在当前实现中,每次启动应用程序或构建时都会触发生成器。

现在我尝试实现一个解决方案,每次有人在类中更改某些内容(例如添加新的私有变量)时触发生成器并保存更改。

generator 使用的类都位于:

 '/src/main/java/core/data' 

由于我没有设法实现它,我的问题是:这是否可能,如果可能,如何实现?

编辑:假设我想以这种方式实现 JPA Metamodel Generator ( https://docs.jboss.org/hibernate/orm/5.4/topical/html_single/metamodelgen/MetamodelGenerator.html )。因此,每次更改并保存 '/src/main/java/core/data' 中的一个文件时,生成器就会开始执行。

gradle
  • 1 个回答
  • 36 Views
Martin Hope
JavaDevS
Asked: 2024-12-10 23:45:56 +0800 CST

使用 liquibase 和 gradle 生成 jooq

  • 5

我想使用 liquibase 生成 jooq。我花了很多时间使用 liquibase 迁移生成 jooq 文件。

尝试使用 jooq 官方网站的说明。未成功

我缺少什么?需要添加什么?

我的 gradle 构建:

plugins {
    id("java")
    id("org.springframework.boot") version "3.3.5"
    id("io.spring.dependency-management") version "1.1.6"
    id("nu.studer.jooq") version "9.0"
}

group = "com.demo"
version = "0.0.1-SNAPSHOT"

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(21))
    }
}


repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.cloud:spring-cloud-starter-openfeign:4.1.4")
    implementation("org.jooq:jooq-meta-extensions-liquibase:3.19.15")

    compileOnly("org.projectlombok:lombok")
    runtimeOnly("org.postgresql:postgresql")
    annotationProcessor("org.projectlombok:lombok")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
    jooqGenerator("org.jooq:jooq-meta-extensions-liquibase:3.19.15")
    jooqGenerator("org.liquibase:liquibase-core:4.30.0")
    jooqGenerator("org.yaml:snakeyaml:1.28")
    jooqGenerator("org.slf4j:slf4j-jdk14:2.0.16")

}

jooq {
    configurations {
        create("main") {
            generateSchemaSourceOnCompilation.set(true)

            jooqConfiguration.apply {
                logging = org.jooq.meta.jaxb.Logging.WARN

                generator.apply {
                    name = "org.jooq.codegen.JavaGenerator"

                    target.apply {
                        packageName = "com.demo.db.generated"
                    }

                    database.apply {
                        name = "org.jooq.meta.extensions.liquibase.LiquibaseDatabase"

                        properties.add(
                                org.jooq.meta.jaxb.Property().withKey("scripts")
                                        .withValue("$rootDir/src/main/resources/db/changelog/db.changelog-master.xml")
                        )

                        properties.add(
                                org.jooq.meta.jaxb.Property().withKey("includeLiquibaseTables").withValue("false")
                        )
                    }
                }
            }
        }
    }
}

结果: 原因:liquibase.exception.ChangeLogParseException:在配置的搜索路径中未找到文件 /Users/user/IdeaProjects/demo/src/main/resources/db/changelog/db.changelog-master.xml:可以使用“searchPath”参数添加更多位置。

我也尝试添加:

                        properties.add(
                            org.jooq.meta.jaxb.Property().withKey("rootPath")
                                .withValue("$rootDir/src/main/resources/db/changelog")
                        )

结果:原因:liquibase.exception.ChangeLogParseException:在配置的搜索路径中未找到文件 /Users/user/IdeaProjects/demo/src/main/resources/db/changelog/db.changelog-master.xml:- /Users/user/IdeaProjects/demo/src/main/resources/db/changelog 可以使用“searchPath”参数添加更多位置。

gradle
  • 1 个回答
  • 15 Views
Martin Hope
Yury K.
Asked: 2024-12-04 07:30:17 +0800 CST

导入具有 @CucumberContextConfigurations 的多个依赖项以利用其步骤定义会导致“CucumberBackendException”

  • 6

我已经与这个问题斗争了两天,但我想已经没有选择了。我不是 Cucumber 或 Gradle 的专家,但由于我的专业领域很接近(Java/Spring/Maven),我一直在努力将多个基于 Gradle 的 Cucumber 项目更新为所用框架的最新版本。我面临的问题之一是io.cucumber.core.backend.CucumberBackendException: Please annotate a glue class with some context configuration.我通过在每个项目中添加一个这样的类来解决它,如下所示:

@CucumberContextConfiguration
@ContextConfiguration("classpath:cucumber.xml")
public class CucumberSpringConfiguration
{

}

这些配置被添加到步骤定义所在的相同包中,否则它是不可见的,因为步骤定义是通过测试运行器中的注释glue属性指定的。@CucumberOptions

因此,在我开始将它们作为依赖项组合在一起之前,这些项目都运行正常。想象一下:项目 A 有一些步骤定义,并CucumberSpringConfiguration定义了其类。项目 B 有自己的步骤定义,并在与其步骤定义相同的包中定义了自己的CucumberSpringConfiguration类。现在,项目 C 导入 A 和 B 作为其依赖项,以利用步骤定义进行端到端测试。问题就在这里:

io.cucumber.core.backend.CucumberBackendException: Glue class class com.projectA.core.stepdef.CucumberSpringConfiguration and class com.projectB.core.stepdef.CucumberSpringConfiguration are both (meta-)annotated with @CucumberContextConfiguration.
Please ensure only one class configures the spring context

有什么办法可以解决这个问题?我考虑过像这样(在 build.gradle 中)从类路径中排除这些内容,但没有成功:

tasks.withType(Test) {
    excludes = ['**/CucumberSpringConfiguration**']
    doFirst {

        // Get the current classpath
        def classpath = sourceSets.test.runtimeClasspath

        // Filter out the specific class file I want to exclude
        classpath = classpath.filter { file ->
            !file.absolutePath.contains("CucumberSpringConfiguration")
        }

        // Set the modified classpath
        setClasspath(files(classpath))
    }
}

我试图将依赖项目中的 CucumberSpringConfiguration 移出该步骤定义包,但由于它在测试运行器中的注释glue参数中使用@CucumberOptions,因此它会抱怨不需要它。

这里非常需要 Cucumber/Gradle 专家的帮助!提前谢谢您!

gradle
  • 1 个回答
  • 23 Views
Martin Hope
Dragas
Asked: 2024-11-27 23:12:37 +0800 CST

gradle 约定插件是否适用于多存储库设置?

  • 7

前言:目标是复制 maven 父 pom 功能,该功能将插件、存储库、配置等应用于不在同一存储库上的项目。

我有一个插件,它将其他插件应用于项目,并配置一些存储库,ala

class BarPlugin implements Plugin<Project> {
   @Override
   void apply(Project p) {
      project.pluginManager.apply("java");
      project.pluginManager.apply("jacoco");
      project.allProjects {
         configuration -> configuration.repositories { mavenCentral(); }
      };
   }
}

据我阅读的 api,我无法使用这样的构造来添加具有给定版本的插件,例如plugin id 'com.foo.bar' version '1',因为插件管理器和插件属性都没有方法来应用具有给定版本的插件,并且该插件必须已经存在于类路径上才能这样应用。

在阅读https://docs.gradle.org/8.11.1/userguide/sharing_build_logic_between_subprojects.html#sec:convention_plugins后,我开始考虑将插件转换为约定插件,但似乎指南仅涉及单存储库设置,其中所有模块都可以通过通用 settings.gradle 文件相互查看。这适用于多存储库设置吗?buildsrc在这种情况下是否对目录进行评估?

gradle
  • 1 个回答
  • 33 Views
Martin Hope
Ronan O'Reilly
Asked: 2024-11-19 18:08:59 +0800 CST

IntelliJ 2024.3 - 错误 - 无法获取未知属性“GradleVersion”

  • 6

我于 18 日安装了最新版本的 intelliJ,但从此无法再同步 Gradle 更改。每当我尝试同步时,都会抛出以下错误:

org.gradle.api.GradleScriptException: A problem occurred evaluating initialization script.
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'GradleVersion'....
at sync_studio_tooling3435_cllv1147ss38zx0z25gq448oz.run(C:\Users\xxxx\AppData\Local\Temp\sync.studio.tooling3435.gradle:6)

知道为什么会发生这种情况吗?我的 build.gradle 中没有 GradleVersion,也没有任何对 sync_studio_tooling 的引用……

gradle
  • 1 个回答
  • 17 Views
Martin Hope
jactor-rises
Asked: 2024-10-25 19:44:31 +0800 CST

如何使用 gradle 对 io.opentelemetry 的瞬态依赖项进行版本控制?

  • 5

在 gradle 中过滤传递依赖项有多详细?我正在与 jvm-classpath 作斗争。在运行时,我们遇到 java.lang.ClassNotFoundException:io.opentelemetry.api.internal.InstrumentationUtil

这个类应该在 opentelemetry-instrumentation-api 中吗?它在哪个版本被删除或添加?

io.opentelemtry 组有许多子模块,我们的构建中有数百种不同的依赖项。因此,无法强制使用特定版本,因为这会导致许多依赖项中断。

有没有办法强制对传递依赖项进行版本控制?例如:

  • 模块 a 依赖于模块 b
  • 模块 b 对模块 c 具有暂时依赖性,而模块 c 又依赖于 io.opentelemtry:*:2.7.0
  • 模块 b 还对模块 d 具有暂时依赖性,而模块 d 又依赖于 io.opentelemtry:*:1.37.0

问题:我不能对依赖项 (模块 b) 施加使用版本 2.7.0 的限制,因为这会导致暂时依赖项 (模块 d) 的使用中断。另一方面,我不能对依赖项 (模块 b) 施加使用版本 1.37.0 的限制,因为这会导致暂时依赖项 (模块 c) 的使用中断。

有什么解决办法吗?

gradle
  • 1 个回答
  • 14 Views
Martin Hope
askSoap
Asked: 2024-10-12 16:32:13 +0800 CST

使用 Gradle 版本目录在哪里可以找到例如“implementation(compose.runtime)”的库版本

  • 5

Compose Multiplatform 向导使用 Gradle 版本目录创建了一个项目,这对我来说是新东西。我现在明白了如何在依赖项中声明依赖项libs.versions.toml以及如何在build.gradle.kts依赖项中引用它们。但是,也有使用以下方式声明的依赖项compose.*:

sourceSets {
    val desktopMain by getting

    androidMain.dependencies {
        implementation(libs.androidx.activity.compose)
        implementation(libs.androidx.material)
    }
    commonMain.dependencies {
        implementation(compose.runtime)
        implementation(compose.foundation)
        implementation(compose.material3)
        implementation(compose.ui)
        implementation(compose.components.resources)
        implementation(libs.vinceglb.filekit.core)
    }
    desktopMain.dependencies {
        implementation(compose.desktop.currentOs)
        implementation(libs.kotlinx.coroutines.swing)
    }
}

我不明白这些来自哪里(即它是一个特定的构建功能还是带有特定的插件等)并且我特别想知道它们对应的确切库和版本。

此外,除了由于省略而缩短之外,它们还提供了其他好处吗libs.?例如,compose.desktop.currentOs它看起来不像是一个特定的库,而更像是一种选择平台相关库的快捷方式。

gradle
  • 1 个回答
  • 30 Views
Martin Hope
gph
Asked: 2024-10-12 06:50:13 +0800 CST

如何使用 gradle 重新定位现有的 jar 文件?

  • 5

我正在开发一个使用 Java 等语言和 Bazel 的项目。我遇到了一堆依赖冲突,想屏蔽一个 jar。Bazel 没有办法做到这一点,所以我使用了 Gradle,这是我以前从未使用过的。使用 chatGPT 时,这是我目前拥有的脚本:


    plugins {
        id("java")
        id("com.github.johnrengelman.shadow") version "8.1.1"
    }
    
    repositories {
        mavenCentral()
        maven {
            url = uri("https://mvnrepository.com/artifact")
        }
    }
    
    dependencies {
        implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.0'
    }
    
    tasks.named('shadowJar', com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
        relocate 'com.fasterxml.jackson', 'shaded.com.fasterxml.jackson'
    }

Gradle 是版本 8.10.2。我收到的错误如下:

    java.lang.IllegalArgumentException: Unsupported class file major version 65
            at org.objectweb.asm.ClassReader.<init>(ClassReader.java:199)
            at org.objectweb.asm.ClassReader.<init>(ClassReader.java:180)
            at org.objectweb.asm.ClassReader.<init>(ClassReader.java:166)
            at org.objectweb.asm.ClassReader.<init>(ClassReader.java:287)

在 Google 和 ChatGPT 之间,我尝试了很多方法,但都没有什么效果,而 ChatGPT 也开始给出与已经尝试过的方法相同的建议。

编辑:为了进一步澄清解决方案,我切换到了 openjdk 21,然后切换了插件,com.gradleup.shadow该插件似乎是我一直在使用的死 repo 的后继者。

gradle
  • 2 个回答
  • 29 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve