You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Gradle 4.5至5.0及Java8至11时遇'java'组件未知属性错误

Gradle 4.5升级到5.0 + Java 8升级到11的问题解决

问题背景

我正尝试将Gradle从4.5版本升级到5.0版本,同时将Java从8升级到11。项目是包含backend和frontend的多模块项目,根项目的build.gradle代码如下:

apply plugin: 'maven-publish'
apply plugin: 'java'
 
def mavenArtifactId = 'root-project-name'
group = 'com.root.project'

allprojects {
    apply plugin: 'eclipse'
    version = '14.5.0-SNAPSHOT';
ext {
    buildDate = new Date();
    productName = 'xyz'
    productDescription = 'xyz'
    gitVersion = getGitVersion();
}

if( project.hasProperty('mvn_username')) {
    mvn_user = mvn_username
}
if(project.hasProperty('mvn_password')) {
    mvn_pass = mvn_password
}

repositories {
    maven { url releaseRepo }
    maven { url snapshotRepo }
    maven { url publicRepo }
}
}

println "Version: " + version;

def currentJvm = org.gradle.internal.jvm.Jvm.current()
println "Building with java " + currentJvm

// Define git version
def getGitVersion() {
    def describeStdOut = new ByteArrayOutputStream()
    
    try {
        exec {
            commandLine 'git', 'describe', '--tags', '--always', '--dirty'
            standardOutput = describeStdOut
            ignoreExitValue true
        }
        describeStdOut.toString().trim()
    }
    catch(Exception e ) {
        "n/a"
    }
}

publish.dependsOn(':backend:test')


publishing {
    repositories {
        maven {
            credentials {
                username=mvn_user
                password=mvn_pass
            }
            
            if (version.endsWith("-SNAPSHOT")) {
                url snapshotRepo
            }
            else {
                url releaseRepo
            }
        }
    }
    
    publications {
        mavenJava(MavenPublication) {
            artifactId = mavenArtifactId 

            from project(':backend').components.java
            
            artifact project(':backend').javadocJar
            artifact project(':backend').sourceJar
            artifact examplePropertiesArtifact
            artifact exampleLog4jFileArtifact
            artifact windowsScriptFile
            artifact linuxScriptArtifact
            artifact aixScriptArtifact

            pom.withXml {
                asNode().appendNode('name', productName)
                asNode().appendNode('description', productDescription)
            }
        }
    }
}

//wrapper {
//  gradleVersion = '5.0'
//}

遇到的错误

升级过程中触发如下错误:

Could not get unknown property 'java' for SoftwareComponentInternal set of type org.gradle.api.internal.component.DefaultSoftwareComponentContainer.

注:子项目backend的build.gradle中已应用java插件。

解决方案

问题根源

Gradle 5.0对组件引用机制做了变更,跨项目访问组件时,直接通过components.java获取可能因子项目配置时机问题导致组件未被正确识别。

修复步骤

  • 调整组件引用方式:将根项目publishing块中from project(':backend').components.java替换为以下两种方式之一:
    1. 安全查找组件:
      from project(':backend').components.findByName('java')
      
    2. 显式指定产物(更清晰,可移除原from行):
      artifact project(':backend').jar
      artifact project(':backend').javadocJar
      artifact project(':backend').sourceJar
      
  • 启用Gradle 5.0 Wrapper:取消注释根项目中的wrapper配置块,确保使用指定版本的Gradle:
    wrapper {
      gradleVersion = '5.0'
    }
    
  • 执行./gradlew wrapper更新Wrapper,再重新构建项目验证问题是否解决。

内容的提问来源于stack exchange,提问作者Shubham kapoor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:40:39