Intellij Idea 模块库Jar未显示在Android Studio的外部库中

ubbxdtey  于 2023-01-25  发布在  Android
关注(0)|答案(1)|浏览(134)

我在Android Studio中External Libraries下显示jar库时遇到问题。我尝试为此库添加javadoc,但我在网上找到的唯一方法是右键单击External Libraries中的库并选择Library Properties...
项目结构是由许多模块组成的树:

rootsdk / 
        main.jar
        main-javadoc.jar
        plugins /
                plugin1 / 
                        build.gradle
                        ...
                plugin2 /
                        build.gradle
                        ...
                ...

依赖项在build.gradle文件中声明,如下所示:

compileOnly files('../../main.jar')

如果我打开plugin1目录,那么依赖项就会正确地显示在External Libraries中,但是如果我打开rootsdk项目,它就不会出现,所有的模块都列出了,并且可以从根项目编译,我可以很好地使用库中定义的类,但是它没有出现在External Libraries下,所以我不能为它添加javadoc。
奇怪的是,有些插件使用其他库,但定义不同:

repositories {
    flatDir {
     dirs 'libs'
    }
}

...

implementation(name: 'core-debug', ext: 'aar')

这些库如预期显示在External Libraries下。
是否缺少一些东西来强制main.jar显示在External Libraries下,或者这是AS中的一个bug?

mbjcgjjk

mbjcgjjk1#

这是一件愚蠢的事情,但是如果你把它做成一个Ivy或者Maven仓库,它应该可以工作。files不行。下面的两个解决方案都应该支持-sources-javadoc后缀。我认为IDEA只实现了来自仓库的工件解析,而没有考虑直接的文件引用。

艾薇

repositories {
    def repoRoot = file(rootProject.projectDir)
    ivy {
        name = "local libs"
        url = repoRoot.toURI()
        patternLayout {
            artifact("[module](-[classifier]).[ext]")
        }
        metadataSources {
            artifact()
        }
    }
}
dependencies {
    // `local` group and version `0` are just a hack so Gradle dependency notation can be used.
    implementation("local:main:0")
    implementation("local:core-debug:0@aar")
}

玛文

你可以做一些类似上面的事情,但是repo结构不太灵活。你需要移动. jar/. aar文件。我建议为它们创建一个文件夹(即使现在有一个)。在这个例子中,我称之为libs

repositories {
    def repoRoot = file(rootProject.projectDir.resolve("libs"))
    exclusiveContent {
        // Work around
        // > Could not GET 'https://repo.gradle.org/gradle/libs-releases-local/local/main/0/main-0.pom'. Received status code 409 from server: Conflict
        // by not allowing Gradle to contact other repositories for "local" files.
        filter {
            includeGroup("local")
        }
        forRepository {
            maven {
                name = "local libs"
                url = repoRoot.toURI()
                metadataSources {
                    artifact()
                }
            }
        }
    }
}
dependencies {
    // `local` group and version `0` are just a hack so Gradle dependency notation can be used.
    implementation("local:main:0")
    implementation("local:core-debug:0@aar")
}

错误消息将告诉您将其放在何处,例如:

* What went wrong:
Execution failed for task ':...'.
> Could not resolve all files for configuration ':...'.
   > Could not find local:main:0.
     Searched in the following locations:
       - file:/.../libs/local/main/0/main-0.jar
     Required by:
         project :...
   > Could not find local:core-debug:0.
     Searched in the following locations:
       - file:/.../libs/local/core-debug/0/core-debug-0.aar
     Required by:
         project :...

请注意,虽然这更复杂,但也更灵活,因为您可以手写或下载POM文件,因此包括本地JAR文件的传递依赖项,如果您的工件有POM XML文件,只需删除metadataSources块。

metadataSources

这个魔术值得一提(docs):

metadataSources {
    artifact()
}

它会告诉Gradle,存储库中没有与工件关联的元数据(POM或Ivy XML文件),只有工件存在。如果没有这些,查找元数据将失败。

相关问题