在仓库容器中找不到 jcenter() 方法的参数 []。

45

我对Gradle和bintray不熟悉。我想要发布这个项目,以便Maven和SBT用户可以方便地使用。我不是这个软件包的原始作者;它似乎已被放弃;我只想发布当前头部。

~/.gradle/gradle.properties文件大致如下:

bintrayUser=mslinn
bintrayKey=blahblah

build.gradle 的内容如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
    }
}
apply plugin: 'com.jfrog.bintray'

allprojects {
    apply plugin: 'idea'

    group = 'org.jfrog.example.bintray.gradle'
    version = '1.0'
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'maven-publish'
    apply plugin: 'com.jfrog.bintray'

    sourceCompatibility = 1.6
    targetCompatibility = 1.6

    dependencies {
        testCompile 'junit:junit:4.7'
    }

    // custom tasks for creating source/javadoc jars
    task sourcesJar(type: Jar, dependsOn: classes) {
        classifier = 'sources'
        from sourceSets.main.allSource
    }

    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }

    // add javadoc/source jar tasks as artifacts
    artifacts {
        archives sourcesJar //, javadocJar
    }

    repositories {
        jcenter()
    }

    publishing {
        publications {
            mavenJava(MavenPublication) {
                if (plugins.hasPlugin('war')) {
                    from components.web
                } else {
                    from components.java
                }

                artifact sourcesJar {
                    classifier "sources"
                }

                artifact javadocJar {
                    classifier "javadoc"
                }
            }
        }
    }

    bintray {
        user = bintrayUser //this usually comes form gradle.properties file in ~/.gradle
        key = bintrayKey //this usually comes form gradle.properties file in ~/.gradle
        publications = ['mavenJava'] // see publications closure
        pkg { //package will be created if does not exist
            repo = 'Java-WebSocket'
//            userOrg = 'myorg' // an optional organization name when the repo belongs to one of the user's orgs
            name = 'Java-WebSocket'
            desc = 'Current HEAD of abandoned project'
            licenses = ['MIT']
            labels = ['websocket', 'java']
        }
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.10'
}

这是问题:

$ gradle bintrayUpload

FAILURE: Build failed with an exception.

* Where:
Build file '/var/work/experiments/websockets/Java-WebSocket/build.gradle' line: 3

* What went wrong:
A problem occurred evaluating root project 'Java-WebSocket'.
> Could not find method jcenter() for arguments [] on repository container.

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

BUILD FAILED

我正在寻求关于如何解决错误信息的建议,以及关于将此项目包含到JCenter中可能会遇到的任何设置问题的建议,以便使发布的Bintray项目对所有人都可用。


1
你可能正在使用一个旧版本的gradle,该版本尚未拥有此方法。gradle -version显示什么? - JB Nizet
今天通过apt-get在XUbuntu上安装。 $ gradle -version

Gradle 1.5

Gradle构建时间:2014年6月15日星期日下午3:27:36 UTC Groovy:1.8.6 Ant:Apache Ant(TM)版本1.9.4,编译于2014年5月9日 Ivy:非官方版本 JVM:1.8.0_25(Oracle Corporation 25.25-b02) 操作系统:Linux 3.16.0-28-generic amd64
- Mike Slinn
3
这是一个相当陈旧的Gradle版本,确实没有jcenter()。当然,您可以将JCenter配置为常规的Maven存储库(maven { url "..." }),而不是使用快捷方式。 - Peter Niederwieser
1
Gradle 1.5非常非常老了。当前版本是2.2.1。最后一个1.x版本是1.12。您应该升级,并考虑使用Gradle Wrapper:http://www.gradle.org/docs/current/userguide/gradle_wrapper.html。 - JB Nizet
3
apt-get提供的Gradle已经过时了。我想知道如何通知相关人员以便他们可以更新.deb文件?我将添加此ppa,似乎它应该提供当前版本:https://launchpad.net/~cwchien/+archive/ubuntu/gradle - Mike Slinn
嗯,看起来我的build.gradle不够充分,和/或者我的~/.gradle内容需要更多的定义。 失败:构建过程中出现异常。
  • 出了什么问题: 在任务':bintrayUpload'的配置中发现了一些问题。
    没有为属性'packageName'指定值。 没有为属性'user'指定值。 没有为属性'apiKey'指定值。 没有为属性'repoName'指定值。
- Mike Slinn
9个回答

51

总结评论中的讨论:

Gradle在1.7版本中添加了jcenter()的快捷方式。任何此版本之前的版本都会出现此异常。您仍然可以通过将其添加为普通的maven repo来使用jcenter:

repositories {
    maven {
        url "https://jcenter.bintray.com"
    }
    ....
}

2
我使用cwchein的PPA更新了Grade。似乎没有人在默认的Debian repo中维护.deb文件。然而,我现在卡在了当前的错误上:>未为属性“packageName”指定任何值。>未为属性“user”指定任何值。>未为属性“apiKey”指定任何值。>未为属性“repoName”指定任何值。其中一些值在build.gradle中,出了什么问题? - Mike Slinn
1
我认为这些是不同的问题,值得单独提出一个问题。如果 jcenter() 起作用,我会接受答案并继续前进。我很乐意在专门针对该问题的问题中提供帮助。 - JBaruch
来自 Twitter:baruch mslinn 因为 DSL 已经改变。你正在使用 0.6 的 DSL 1.0 版本。我们会进行更新。 - Mike Slinn
帖子中的最后一句话是:“我正在寻求有关如何解决错误消息以及关于将此项目包含到JCenter中可能遇到的任何设置问题的建议,以便发布的bintray项目可供所有人使用的建议。” - Mike Slinn
所以我完美地回答了第一个问题,并且会关闭第二个问题,因为它太宽泛了。 - JBaruch
显示剩余2条评论

6
前往Android项目选项卡,在资源管理器中折叠Gradle Scripts。你会找到一个名为gradle-wrapper.properties的文件。 打开该文件,选择全部内容并粘贴以下代码。
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

立即同步

但在此之前,您需要在 build.gradle(Project) 文件中进行更改。

打开文件,选择全部并将以下代码复制到整个表格中:

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'com.google.gms:google-services:4.0.0'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'https://jitpack.io'}
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

立即同步


这个答案涉及到Android,而不是Scala / SBT。 - Mike Slinn
@MikeSlinn 这只是 Android Gradle 文件,不是 Scala,请先检查再评论。 - Eshan Chattaraj
我是原帖发布者。我想使用Gradle而不是Scala项目中使用的SBT。你正在谈论其他事情。 - Mike Slinn

6

我在一个Android项目中遇到了这个问题,需要将gradle-wrapper.properties中的Gradle升级到4.1。


这对我有用。我根据https://developer.android.com/studio/releases/gradle-plugin.html使用了最新的distributionUrl值。 - Barry Staes

4
我遇到了相同的错误。以下方法(如这里所述)对我有效。
添加一个任务。
task wrapper(type: Wrapper) {
    gradleVersion = '2.0'
}

运行一次后, 以后使用gradlew代替gradle


我必须下载一个适合的新 Gradle 才能运行 "gradle wrapper"。 - Thorbjørn Ravn Andersen

1

当使用gradle命令在命令行构建Android应用程序时,遇到了这个错误

尝试:

./gradlew

而不是

gradle


1

我有同样的问题。在我的情况下,这是一个新手错误。也许对任何人都有帮助。 我将代码从我更改的代码还原为原始代码。

我更改后的代码:

buildscript {
    ext.kotlin_version = '1.2.71'
    repositories { google()  jcenter()
    }

原始代码:

buildscript {
    ext.kotlin_version = '1.2.71'
    repositories {
        google()
        jcenter()
    }

0

当我在下载gradle时中途停止,发生了这种情况,为了解决这个问题,我们需要删除旧的gradle并更新和同步

要删除,请使用

task clean(type: Delete) {
delete rootProject.buildDir
}

要更新,请将以下内容添加到您的graddle-properties文件中:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

然后进行同步操作。


0
最简单的解决方案是在build.gradle文件中将repositories中的JCenter()改为mavenCentral()。

0

听起来很傻,但请确保您在单独的一行上拥有jcenter。我曾经复制粘贴过一些代码,结果jcenter没有在自己的一行上。

allprojects {
    repositories {
        google {
            content {
                ...
            }
        }                  jcenter() // DERP
        maven { url "https://jitpack.io" }
        maven { url 'https://maven.google.com/' } 
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接