2014-01-09 14 views
5

Ich versuche, ein vorhandenes Projekt von Ameise zu gruppieren. Ich benutze Intellij 13, und ich habe es geschafft, ein Modul unter Gradle laufen zu lassen, indem ich die IMI-Datei lösche. Es besteht jedoch darauf, eine IML-Datei zu schreiben, deren Name dem Verzeichnisnamen und nicht dem Modulnamen entspricht.Intellij & Gradle-Modul Dateiname

Ich weiß, dass dies wahrscheinlich kein Problem für Leute ist, die alleine oder in einem einzigen Team in einem großen Unternehmen arbeiten, in dem die IDE und die Version von oben weitergegeben werden. Jedoch involviert dieses Projekt eine Vielzahl von Auftragnehmern von mehreren Firmen, die alle ihre eigenen IDEs liefern. Das Lizenzierungsmodell von Intellij macht es unpraktisch, die IDE an externe Auftragnehmer zu liefern, da die meisten Arbeiten außerhalb des Standorts ausgeführt werden und es keine Möglichkeit gibt, den Lizenzschlüssel zurückzunehmen oder zu entmächtigen, sobald Sie ihn freigegeben haben.

Seit Intellij Upgrade nicht frei ist, dann ist es fast unmöglich, alle zu koordinieren auf einmal zu aktualisieren und so verwende ich das Projektformat-Datei basiert, mit einer Projektdatei ourproject.ij12.ipr1 und einem anderen benannten ourproject.ij13.ipr und IML-Dateien für das Modul in der genannten foo Verzeichnis ist foo.ij12.iml und foo.ij13.iml

Dies funktioniert gut, und die Politik ist, dass jeder hat bis 14 aus weg von 12 so zu bekommen kommt, dass wir gehen nicht eine unendliche Anzahl von Versionen bekommen, aber wir haben keine um unsere Upgrades auch auf die Nanosekunde zu synchronisieren.

Leider, sobald ich versuche, build.gradle im foo Verzeichnis in intellij zu verwenden, schreibt es foo.iml, die die vorhergehenden Konventionen völlig bricht. Außerdem fügt es ein weiteres Modul hinzu (ohne zu fragen) und das führt zu zwei Modulen im selben Verzeichnis und die IDE lässt Sie nicht eins ändern, weil zwei Module in demselben Verzeichnis ein Fehler sind.

Kann mir jemand sagen, wie man den Dateinamen beeinflusst, den Intellij für die IMI-Datei schreibt, wenn man Gradle benutzt? Offensichtlich mit separaten Verzeichnisnamen wird es nicht tun, es sei denn, ich werde sehr mit Symlinks und Ant.symlinks Aufgabe, und das wird nicht funktionieren, wenn jemand versucht, es nativ auf Windows auszuführen.

EDIT: Da die Leute die Angewohnheit haben, ihre nicht angenommenen Antworten zu löschen, lassen Sie mich klären. Ich bin mir der grandle Idee Eclipse Plugins bewusst. Ich frage nicht nach einem Führer für den IDE-Agnostizismus. Ich finde, es gibt Dinge von Wert in IDE-Setups, und möchte sie unter anderen mit der gleichen IDE teilen (wo "gleich" die Version enthält, wird nicht die gemeinsame Nutzung von mehreren Versionen erwartet, sondern mehr als eine Version).

Um genauer zu sein, ich bin auf der Suche nach einer der folgenden:

  • Eine Konfiguration oder Trick, der mir die Dateinamen von iml Dateien
  • Eine andere Möglichkeit, halten zwei Versionen von IDE-Dateien zu steuern das ist nicht zu byzantinisch.
  • Bestätigung von einem der JetBrains Leute, die an SO teilnimmt, dass es kein Ziel mehr gibt, mit IDEA mein Ziel zu erreichen.

EDIT2: Lösungen mit gradle die Dateien zu erzeugen sind, nicht zur Arbeit gehen. Intellij 13 ändert der Dateiname, um den Verzeichnis-Namen nicht dem Modul-Namen zu entsprechen, der das Soruce des Problems ist. Ich brauche eine Lösung, die Intellij überzeugt, das nicht zu tun. Ich hatte vor dem Upgrade auf 13 keine Probleme.

+0

Die folgenden Websites haben mehr Informationen, wenn es hilft -> http: // Stackoverflow. com/questions/7060727/How-To-Deal-mit-Intellij-Idee-Projekt-Dateien-unter-Git-Source-Control-ständig, http://devnet.jetbrains.com/message/5245457, http: // devnet.jetbrains.com/thread/279596?tstart=0 –

+0

Alle guten Sachen, aber keine von es scheint mein tatsächliches Problem anzusprechen (es sei denn, ich habe etwas verpasst). – Gus

Antwort

3

Mit dem idea plugin war ich in der Lage, basierend auf einem Kommandozeilenparameter zwei IMI-Dateien für mich zu erzeugen. Hier ist die (minimale) build.gradle Datei, die ich erstellt

apply plugin: 'java' 
apply plugin: 'idea' 

def imlName = name + (hasProperty('generate12') ? '.ij12' : '.ij13') 

idea { 
    module { 
    name = imlName 
    } 
} 

Dieses Skript erzeugt eine ‚13‘ Datei für Sie standardmäßig. Um das zu ändern, müssen Sie die Eigenschaft generate12 festlegen.

Befehle Ich lief:

> gradle idea 
> gradle idea -Pgenerate12=true 
> ls 
    build.gradle test.ij12.iml test.ij13.iml test.ipr test.iws 

Die idea module Dokumentation könnte für Sie einige weitere nützliche Dinge.

Randbemerkung: ich denke, es wäre am besten, wenn Sie das Projekt ohne IML-Dateien zu jeder gab und sagte ihnen gradle idea (ohne den benutzerdefinierten iml Namen Sachen) laufen die Dateien erstellt werden zu lassen. Auf diese Weise können Sie keine Dateien verwalten, die von IntelliJ geändert und überschrieben werden. Wir checken inl-Dateien ein und es verursacht nichts als Probleme, wenn jemand etwas eincheckt und es für alle bricht.

+0

Interessant, aber der Dateiname ist nicht der Punkt. Der Punkt ist, eine Datei mit Funktionen und Einstellungen für 12, und eine andere mit Funktionen und Einstellungen für 13 zu haben. Es gibt keinen Unterschied zwischen den zwei generierten Dateien in Ihrer vorgeschlagenen Lösung. Beachten Sie auch, dass test.ij12.ipr und test.ij13.ipr ebenfalls erforderlich sind .... Und meine Erfahrung ist, dass intellij 13 beginnt, eine test.iml für ein Modul zu schreiben, selbst wenn es eine Datei namens test.ij13 anfänglich liest im Testverzeichnis. Ich brauche eine Lösung INSIDE intellij oder dieses Verhalten wird jede externe Lösung vermeiden. – Gus

+0

Sie möchten also wissen, wie Sie mehrere Projektdateien (iml, ipr usw.) in einem Verzeichnis speichern, indem Sie nur intellij-Konfigurationen verwenden, damit beim Öffnen einer Projektdatei (12 oder 13) die richtigen Dateien mit den Namen geöffnet werden? – Ethan

+0

Es interessiert mich eigentlich nicht, woher die Dateien kommen, aber das Problem liegt darin, dass intellij die Datei neu benennt. Was das Groß-/Kleinschriftzeichen anbelangt, so bezieht sich die Frage, obwohl die Lösung möglicherweise keinen Großbuchstabencode enthält, ** auf Großbuchstaben. – Gus

2

Verwenden Sie settings.gradle-Datei, um Modulnamen zu ändern. Intellij sollte es verwenden. Als Nächstes können Sie mit "gradle.properties" Ihr Präfix festlegen.

z. setting.gradle:

rootProject.name = adjustName("ourproject") 

include "someProject" 
// ... other includes 

rootProject.children.each{ it.name=adjustName(it.name)} 

String adjustName(String name) { 
    String pref = System.properties['myIdeaVersionPrefix'] 
    return pref != null ? name + "." + pref : name 
} 

gradle.properties:

systemProp.myIdeaVersionPrefix=ij13 

siehe Screenshot für die Konfiguration bei http://i.stack.imgur.com/CH2Bv.png