2014-12-28 99 views
1

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

的第一行我的一些/前缀/ A/B/C/d/E.java是:

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

的IntelliJ认为包的名称应该是 'CD' 而不是'ABCD'。因为我在模块的build.gradle中设置了

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

我知道我可以做下面的变化作出的IntelliJ开心:

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

但我不能这样做,因为那里是下“一些/前缀”项目庞大的数字,我绝对不要”我想把它们全部引入到这个模块中。

我曾经在我的原生Android Studio项目添加packagePrefix =“AB”在我的“module.iml”和它工作得很好: https://www.jetbrains.com/idea/help/configuring-content-roots.html#d2814695e312

但我不知道如何来完成类似修复后迁移到Gradle项目... 请帮助我,谢谢!

回答

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() 
       } 
      } 

     } 
    } 
} 
相关问题