Gradle:找不到提供的方法()(组)

Thu*_*fir 3 ear ejb java-ee gradle maven

provided当这是Maven 指定的语法时,为什么Gradle找不到方法?

thufir@doge:~/NetBeansProjects/gradleEAR$ 
thufir@doge:~/NetBeansProjects/gradleEAR$ gradle clean

FAILURE: Build failed with an exception.

* Where:
Build file '/home/thufir/NetBeansProjects/gradleEAR/build.gradle' line: 40

* What went wrong:
A problem occurred evaluating root project 'gradleEAR'.
> Could not find method provided() for arguments [{group=javax, name=javaee-api, version=7.0}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 8.684 secs
thufir@doge:~/NetBeansProjects/gradleEAR$ 



plugins {
    id 'com.gradle.build-scan' version '1.8' 
    id 'java'
    id 'application'
    id 'ear'
}

mainClassName = 'net.bounceme.doge.json.Main'

buildScan {
    licenseAgreementUrl = 'https://gradle.com/terms-of-service'
    licenseAgree = 'yes'
}

repositories {
    jcenter()
}

jar {
    manifest {
        attributes 'Main-Class': 'net.bounceme.doge.json.Main'
    }
}

task fatJar(type: Jar) {
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': '3.4.0'
        attributes 'Main-Class': 'net.bounceme.doge.json.Main'
    }
}

dependencies {
    compile group: 'javax.json', name: 'javax.json-api', version: '1.1'
    compile group: 'org.glassfish', name: 'javax.json', version: '1.1'
    provided group: 'javax', name: 'javaee-api', version: '7.0'
}
Run Code Online (Sandbox Code Playgroud)

在参照:

Gradle如何解决javaee-api依赖关系以构建EAR?

Nam*_*man 7

为了provided在maven中使用依赖关系构建范围.您可能希望将您配置build.gradle为以下内容:

configurations {
    provided
}

sourceSets {
    main.compileClasspath += configurations.provided
    test.compileClasspath += configurations.provided
    test.runtimeClasspath += configurations.provided
}
Run Code Online (Sandbox Code Playgroud)

然后进一步利用您的依赖关系:

dependencies {
    compile group: 'javax.json', name: 'javax.json-api', version: '1.1'
    compile group: 'org.glassfish', name: 'javax.json', version: '1.1'
    provided group: 'javax', name: 'javaee-api', version: '7.0'
} 
Run Code Online (Sandbox Code Playgroud)

或者您可以按照以下compileOnly方式执行:

dependencies {
    ...
    compileOnly 'javax:javaee-api:7.0'
}
Run Code Online (Sandbox Code Playgroud)

由于在Maven中央存储库中也提到这里