【问题标题】:Using Eclipse NonNull annotations with multiple Gradle projects在多个 Gradle 项目中使用 Eclipse NonNull 注解
【发布时间】:2021-09-13 19:05:13
【问题描述】:

我们在代码中使用 Eclipse @NonNull 和 @Nullable 注释已经有一段时间了。 我们现在正在将一些使用 Gradle 定义的 Spring 项目添加到我们的系统中。这些项目也将与我们的独立项目共享相当多的代码。

当 Spring/Gradle 项目通过 Gradle 生成的 .jar 文件引用共享代码时,我们看到了一个问题,因为 Eclipse 注释(编译时检查)不起作用。 Eclipse 需要具有共享 jar 的源代码才能使注释起作用。在 Eclipse 项目中附加源代码仅在您需要执行 Gradle Refresh 之前有效,因为这会重建 eclipse .project 和 .classpath 文件。

每次更改共享代码时都必须显式重建共享 .jar 也是一个问题。它不是自动完成的。

我还没有找到一种方法让 Spring/Gradle 项目只使用第二个源目录来存储共享代码,而不需要将共享代码作为生成的 .jar 文件。

有没有什么好方法可以在 Eclipse 中的多个 Gradle 项目之间共享代码 - 无需使用中间 .jar 文件? (或其他使 Eclipse 注释工作的方法。)

不太确定如何给出完整的示例,因为其中大部分是 gradle 和 eclipse 配置。

这里是 Gradle 配置文件:settings.gradle

pluginManagement {
    repositories {
            maven { url 'https://repo.spring.io/milestone' }
            gradlePluginPortal()
    }
}
rootProject.name = 'App1-Account-Manager'

和 build.gradle

plugins {
    id 'org.springframework.boot' version '2.5.0-RC1'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}
group = 'com.efi'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/milestone' }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.2'

    implementation 'org.springframework.boot:spring-boot-starter-amqp'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.amqp:spring-rabbit-test'

    implementation files('lib/eflow/eFlowClientApi.jar',
    'lib/eflow/eFlowCryptography.jar',
    'lib/eflow/json-simple-1.1.1.jar',
    'lib/eflow/commons-codec-1.4.jar',
    'lib/eflow/commons-io-2.6.jar',
    'lib/eflow/commons-lang-2.6.jar',
    'lib/eflow/commons-logging-1.2.jar',
    '../App1-Commons/build/libs/App1-Commons-0.0.1-SNAPSHOT.jar'
    )

    implementation group: 'org.eclipse.jdt', name: 'org.eclipse.jdt.annotation', version: '2.1.100'

    implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.7'

    runtimeOnly 'org.postgresql:postgresql'

    testImplementation 'org.springframework.security:spring-security-test'
}

test {
    useJUnitPlatform()
}

App1-Commons 是多个其他项目所依赖的共享代码项目。这就是一堆 @NonNull 注释所在的位置。

我可以将 App1-Account-Manager 项目设置为依赖于 Eclipse 中的 App1-Commons 项目 - 但是一旦您运行 Gradle Refresh,它就会失去该连接。

我更希望将 App1-Commons 的源代码包含在 App1-Account-Manager 项目中 - 但我不知道如何配置 Gradle 以在 Eclipse 项目中执行此操作。

【问题讨论】:

  • 听起来项目依赖是通过创建的工件完成的,而不是直接直接引用项目。是的,字节码不包含空注释。因此必须附加源代码或 Javadoc。在所有情况下,这都应该可以通过 Gradle 实现。请出示minimal reproducible example 你所拥有的。

标签: java eclipse gradle annotations


【解决方案1】:

我想我找到了解决方案。我需要在 build.gradle 文件中添加一个 SourceSets 块,如下所示:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
            srcDir '../App1-Commons/src/main/java'
        }
    }
}

并删除对 App1-Commons jar 文件的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多