2016-06-07 11 views
0

Ich bin neu in Groovy und Gradle. Ich mache normalerweise auch nicht viel mit XML. Problem, das ich habe ist, dass unsere Integrationstests nicht als Testquellen markiert sind, die Probleme mit unserem Build verursachen. Soweit ich das beurteilen kann, sind sie in Gradle richtig gemacht. OK, jetzt ein Code-Kontext. Dies ist ein Beispiel eines unserer problematisch * .iml Dateien:Wie benutze ich das Groovy/idea Plugin, um intelliJ IDEA XML zu manipulieren?

<?xml version="1.0" encoding="UTF-8"?> 
<module external.linked.project.id=":project:projects:chicken:integrationTest" external.linked.project.path="$MODULE_DIR$/../../../../../project/projects/chicken" external.root.project.path="$MODULE_DIR$/../../../../.." external.system.id="GRADLE" external.system.module.group="eas.project.ouboundnmanagement-project" external.system.module.type="sourceSet" external.system.module.version="6.8.0-SNAPSHOT" type="JAVA_MODULE" version="4"> 
    <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false"> 
    <output url="file://$MODULE_DIR$/../../../../../project/projects/chicken/build/classes/it" /> 
    <exclude-output /> 
    <content url="file://$MODULE_DIR$/../../../../../project/projects/chicken/src/integrationTest"> 
     <sourceFolder url="file://$MODULE_DIR$/../../../../../project/projects/chicken/src/integrationTest/java" isTestSource="false" /> 
     <sourceFolder url="file://$MODULE_DIR$/../../../../../project/projects/chicken/src/integrationTest/resources" type="java-resource" /> 
    </content> 
    <content url="file://$MODULE_DIR$/../../../../../project/projects/chicken/src/it"> 
     <sourceFolder url="file://$MODULE_DIR$/../../../../../project/projects/chicken/src/it/java" isTestSource="false" /> 
     <sourceFolder url="file://$MODULE_DIR$/../../../../../project/projects/chicken/src/it/resources" type="java-resource" /> 
... 

Aus irgendeinem Grund IntelliJ IDE besteht auf dem zusätzliche Inhalte Wurzel. Es hat etwas damit zu tun, dass der Name der Aufgabe integrationTest ist und in allen anderen Fällen nennen wir es it. Zum Beispiel ist das Quellverzeichnis src/it/java. Das muss entfernt werden. Auch für die eine, die korrekt ist, müssen wir isTestSource zu true ändern und ich denke, wir müssen auch type="java-resource" zu type="test-resource" oder vielleicht type="java-test-resource" ändern.

Bisher habe ich versucht:

idea { 
    module { 
     iml { 
      withXml { xmlProvider ->     // Get root node. 
       def moduleNode = xmlProvider.asNode() 
       def contents = moduleNode.findAll { node -> node.name == 'content' } 
       println "####### $contents" 
      } 
     } 
    } 
} 

Die oben druckt #########[] so nicht sehr hilfreich oder informativ.

Es könnte bessere Ansätze geben, aber eine Möglichkeit wäre, eine Sammlung aller <content...> Knoten zu bekommen. Iterieren Sie darüber und entfernen Sie die URL, für die das URL-Attribut mit 'integrationTest' endet. Auch für alle mit einer URL, die mit it endet, rufen Sie sourceFolder Elemente ab und legen Sie die Attribute isTestSource bzw. type fest.

Problem ist, dass ich nicht herausfinden kann, welche Anrufe gemacht werden müssen, um dies zu erreichen. Es hilft nicht, dass die IDE mir oft nicht sagt, was die möglichen Anrufe in einem Drop-Down sind, wie es normalerweise der Fall ist.

[UPDATE] Ich habe jetzt Code, der das Problem behebt, aber IntellJ erkennt die geänderten * .iml's nicht. Vor dem Update auf 2016.1.3 war es soweit.

meine Quelle-Sets für Integrationstests So wie“

sourceSets { 
    integrationTest { 
     java { 
      compileClasspath += main.output + test.output 
      runtimeClasspath += main.output + test.output 
      srcDir file('src/it/java') 
      output.classesDir = "$buildDir/classes/it" 
     } 

     def resourceDir = file('src/it/resources') 
     if (resourceDir.exists()) { 
      resources.srcDir resourceDir 
      output.resourcesDir = "$buildDir/resources/it" 
     } 
    } 
} 
+0

Wenn Sie die gradle Plugin Idee zum erstellen sollten die Idee Projekt, Quelle und Testquellverzeichnisse richtig, so lange markiert werden, da sie zu den sourceSets in build.gradle hinzugefügt werden. – Steinar

+0

Ich fürchte, das ist nicht der Fall. Jedenfalls nicht für uns. – user447607

+0

Wie auch immer, wir sprechen über Integrationstests. – user447607

Antwort

0

arbeiten Dies wird nicht, wenn Sie Gradle verknüpfen. Schaut euch jetzt, um einen Fehler gibt es, die von Integrationstests verhindert werden ordnungsgemäß gekennzeichnet. Bitte stimmen Sie für es.

https://youtrack.jetbrains.com/issue/IDEA-151925

+0

Es sieht so aus, als ob sie es vielleicht repariert haben. :-) – user447607

Verwandte Themen