包名称与文件路径不对应 - Gradle配置

时间:2014-12-28 15:12:22

标签: android intellij-idea gradle android-studio

我最近尝试将普通的Android Studio(IntelliJ)项目迁移到Gradle项目。目前我遇到了一个问题:IntelliJ在每个文件的开头都给我一个警告,说我的'包名称与文件路径' 不对应。 e.g。

我的一些/前缀/ a / b / c / d / E.java的第一行是:

package a.b.c.d;
....

IntelliJ认为包名应该是' c.d '而不是' a.b.c.d '。因为我设置了

SourceSets {
    main.java.srcDirs = ["some/prefixes/a/b"] 
}

在模块的build.gradle中。

我知道我可以在下面进行更改,以使IntelliJ满意:

SourceSets {
    main.java.srcDirs = ['some/prefixes'] 
}

但我无法做到这一点,因为' some/prefixes'' module.iml'我绝对不想将所有这些介绍到这个模块中。

我曾经在我的' {{1}}'中添加 packagePrefix =" a.b" 。在我最初的Android工作室项目中它运作良好: https://www.jetbrains.com/idea/help/configuring-content-roots.html#d2814695e312

但是我不知道如何在迁移到Gradle项目后完成类似的修复。

1 个答案:

答案 0 :(得分:0)

我最终为 gradle 编写了一个任务。 该任务将着名的 packagePrefix 添加到* .iml文件中。

此解决方案仅适用于 intelliJ ,我希望有人有更好的解决方案。

task addPackagePrefix << {
println 'addPackagePrefix'
def  imlFile = file(MODULE_NAME+".iml")

if (!imlFile.exists()) {
    println 'no module find '
    return

}
def parsedXml = (new XmlParser()).parse(imlFile)

if(parsedXml.component[1] && parsedXml.component[1].content){
    parsedXml.component[1].content.findAll { Node node ->
        node.sourceFolder.findAll { Node s ->
            def url = s.attribute("url").toString()

            if (url.endsWith(SRC_DIR)) {
                println 'Node founded '
                def attr = s.attribute('packagePrefix')
                if (attr == null) {
                    // add prefix
                    println 'Adding package prefix'
                    s.attributes().put('packagePrefix', PACKAGE_NAME)
                    println s.toString()

                    // writing
                    def writer = new StringWriter()
                    new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
                    imlFile.text = writer.toString()
                }
            }

        }
    }
}