【问题标题】:Package name does not correspond to the file path - Gradle configuration包名与文件路径不对应 - Gradle 配置
【发布时间】:2014-12-28 15:12:21
【问题描述】:

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

我的 some/prefixes/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' 下有大量项目,我绝对不想将它们全部引入这个模块。

我曾经在我原来的 Android 工作室项目中的“module.iml”中添加了一个 packagePrefix="a.b",它运行良好: https://www.jetbrains.com/idea/help/configuring-content-roots.html#d2814695e312

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

【问题讨论】:

    标签: android intellij-idea gradle android-studio


    【解决方案1】:

    我最终为 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()
                    }
                }
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 2014-12-13
      • 2018-11-07
      • 2019-05-07
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      相关资源
      最近更新 更多