2014-01-09 48 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