2014-01-09 82 views
5

我正嘗試將現有項目從ant移動到gradle。我使用Intellij 13,並且通過刪除iml文件,我設法讓一個模塊在gradle下運行。但是,它堅持編寫一個名稱與目錄名稱不匹配的iml文件,而不是模塊名稱。Intellij&Gradle模塊文件名

我認識到,對於那些單獨工作的人或單個團隊中的IDE和版本從高處流傳的大公司來說,這可能不是問題。然而,這個項目涉及幾家公司的各種承包商,他們都提供自己的IDE。 Intellij的許可模式使得將IDE提供給外部承包商是不切實際的,因爲大部分工作都是在現場完成的,並且一旦你放棄了授權密鑰,就無法取回或取消授權。

由於升級的IntelliJ是不是免費的,這幾乎是不可能來協調大家來一次升級,所以我使用基於文件的項目格式,名爲ourproject.ij12.ipr1項目文件和另一個名爲ourproject.ij13.ipr並在該模塊的IML文件目錄foofoo.ij12.imlfoo.ij13.iml

這個偉大的工程,和政策是每個人都有,直到14出來下車的12讓我們沒有得到版本會無限多的,但是我們沒有即使我們的升級也同步納秒。

不幸的是,一旦我嘗試在intellij的foo目錄中使用build.gradle,它會寫入foo.iml這完全違反了上述慣例。此外,它添加了另一個模塊(不詢問),並導致同一目錄中有兩個模塊,而ide不會讓您更改任何一個模塊,因爲同一目錄中的兩個模塊是錯誤的。

誰能告訴我如何影響Intellij在使用gradle時爲iml文件寫入的文件名?顯然有單獨的目錄名是不會去做的,除非我對符號鏈接和ant.symlinks任務做了非常詳細的說明,如果有人試圖在Windows上本地運行它,那麼這種方法就無法工作。

編輯:由於人們似乎習慣於刪除他們未被接受的答案,請讓我澄清一下。我知道gradle的想法插件。我不是要求IDE不可知論指南。我發現在IDE設置中有一些有價值的東西,並且希望使用相同的IDE(其中「相同」包括版本,不期望交叉版本共享,但是一次有多個版本)共享它們。

更具體地講,我要尋找的其中之一:

  • 的配置或技巧,讓我來控制的IML文件
  • 另一種方式的文件名保持的IDE文件的兩個版本,那不是拜占庭。
  • 確認參加SO的JetBrains人員之一不再以IDEA完成我的目標。

EDIT2:涉及到gradle生成文件的解決方案不起作用。 Intellij 13 更改文件名稱以匹配目錄名稱而不是模塊名稱,這是問題的癥結所在。我需要一個解決方案來說服Intellij不這樣做。 升級到13之前我沒有問題。

+0

下列網站

systemProp.myIdeaVersionPrefix=ij13 

見截圖的配置有更多的信息,如果有幫助 - > HTTP://計算器。 com/questions/7060727/how-to-deal-with-intellij-idea-project-files-under-git-source-control-constant,http://devnet.jetbrains.com/message/5245457,http:// devnet.jetbrains.com/thread/279596?tstart=0 –

+0

所有好東西,但沒有它似乎解決了我的實際問題(除非我錯過了某些東西)。 – Gus

回答

3

使用這個想法插件,我能夠根據命令行參數爲我生成兩個iml文件。下面是我創建

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

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

idea { 
    module { 
    name = imlName 
    } 
} 

這個腳本會爲你生成默認爲「13」文件中的(最小)build.gradle文件。所以要改變,你需要設置generate12屬性。

命令我跑:

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

idea module文檔可能有一些有用的東西給你。

附註: 我認爲這將是最好的,如果你給不IML文件到每個人的項目,並告訴他們運行gradle idea(不定製IML名字的東西),讓這些文件被創建。這將允許您不必維護將被IntelliJ修改和覆蓋的文件。我們檢查iml文件,當有人檢查某些內容併爲每個人打破它時,它只會產生問題。

+0

有趣,但文件名不是重點。關鍵是要有一個文件的功能和設置爲12,另一個文件的功能和設置爲13.在建議的解決方案中生成的兩個文件沒有區別。還要注意test.ij12.ipr和test.ij13.ipr也是必需的....我的經驗是即使它最初讀取一個名爲test.ij13的文件,intellij 13也會開始爲一個模塊寫一個test.iml在測試目錄中。我需要INSIDE intellij的一個解決方案,或者這種行爲會消除任何外部解決方案。 – Gus

+0

因此,您想知道如何在一個目錄內使用多個項目文件(iml,ipr等),僅使用intellij配置,以便在打開項目文件(12或13)時打開帶有名稱的正確文件? – Ethan

+0

我其實不在乎文件來自哪裏,但問題在於intellij重命​​名文件。至於gradle標籤,雖然解決方案可能不包含gradle代碼,但這個問題**涉及到並涉及到gradle。 – Gus

2

使用settings.gradle文件更改模塊名稱。 Intellij應該使用它。 接下來,您可以使用gradle.properties來設置您的前綴。

E.g. 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:在http://i.stack.imgur.com/CH2Bv.png