我最近尝试将普通的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项目后完成类似的修复。
答案 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()
}
}
}
}
}