2014-12-28 3 views
1

일반 Android Studio (IntelliJ) 프로젝트를 Gradle 프로젝트로 최근에 이전하려고합니다. 그리고 현재 나는 문제가 발생했습니다 : IntelliJ는 모든 파일의 시작 부분에 경고 메시지를 내 패키지 이름이 파일 경로 '과 일치하지 않는다고 말합니다. 예 :패키지 이름이 파일 경로와 일치하지 않습니다. - Gradle configuration

의 첫 번째 줄 내 일부/접두어/A/B/C/D는/E.java은 다음과 같습니다

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

인 IntelliJ 대신 'ABCD의 패키지 이름은'CD '이어야한다고 생각 '. 내가 설정 했으므로 모듈의 build.gradle에서

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

을 설정합니다.

은 내가 IntelliJ를 행복하게 아래의 변경을 할 수 알고 :

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

을하지만 난 할 수 없어 거기에 몇 가지/접두사 '에서 프로젝트의 거대한 수있어하기 때문에 확실히'돈 있음 이 모듈을 모두이 모듈에 도입하려고합니다.

나는 내 원래 안드로이드 스튜디오 프로젝트에서 내 'module.iml'에 packagePrefix = "AB"을 추가하는 데 사용하고 그것을 잘 작동합니다 : 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() 
       } 
      } 

     } 
    } 
} 
관련 문제