试图让一个flatdir仓库在我的Windows PC上工作。

但是,当我尝试列出存储库时,它失败并显示以下错误。

列出文件将显示 jar 。

运行检查存储库任务显示该目录存在。

运行uploadArchves似乎不执行任何操作(本地存储库中没有文件)。

谢谢。

编辑:事实证明flatdir没有url属性,因此可以解释生成错误,但是在上载存档之后,flatdir目录中仍然没有任何内容。

您如何使uploadArchives实际执行某项操作?

编辑:在这里工作的生成文件:

apply plugin: 'java'
repositories {
    flatDir {
        name "localRepository"
        dirs "d:/ray/gradlerepository/"
    }
}
uploadArchives {
    repositories {
        add project.repositories.localRepository
    }
}

这是原始的东西:
    D:\ray\dev\conradapps\lib1>gradle mLR
    :myListRepositories
    Repositories:
    Name: BintrayJCenter; url: https://jcenter.bintray.com/
    :myListRepositories FAILED

    FAILURE: Build failed with an exception.

    * Where:

   Build file 'D:\ray\dev\conradapps\lib1\build.gradle' line: 15

    * What went wrong:
    Execution failed for task ':myListRepositories'.
    > `Could not find property 'url'` on org.gradle.api.internal.artifacts.repositorie
    s.DefaultFlatDirArtifactRepository_Decorated@a7a0831.

生成文件:
apply plugin: 'java'
repositories {
    //jcenter()
    flatDir {
        name "localRepository"
        dirs "d:/ray/gradlerepository/"
    }
}
dependencies {
    testCompile 'junit:junit:4.12'
}
task myListRepositories << {
    println "Repositories:"
    project.repositories.each { println "Name: " + it.name + "; url: " + it.url }
}
task myListArchives << {
    println "Archives Artifacts: " + configurations.archives.allArtifacts
}
task myCheckRepository << {
    if(new File("d:/ray/gradlerepository").exists()) println("file exists");
        else println("file not found!");
}

最佳答案

根据API的要求,FlatDirectoryArtifactRepository没有url属性(但它具有dirs),尽管您尝试在此处访问它

project.repositories.each { println "Name: " + it.name + "; url: " + it.url }

这适用于jcenter,因为它是一个Maven存储库(只是另一个存储库类型),并且具有这样的属性。

您可以修改您的任务,使其仅显示ArtifactRepository interface的公共(public)存储库字段,或添加一些逻辑以检查存储库类型,以便针对不同存储库类型以不同方式打印存储库信息,并防止访问不存在的字段。

10-04 10:33