Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Intellij&;渐变模块文件名_Java_Ant_Intellij Idea_Gradle - Fatal编程技术网

Java Intellij&;渐变模块文件名

Java Intellij&;渐变模块文件名,java,ant,intellij-idea,gradle,Java,Ant,Intellij Idea,Gradle,我正试图将一个现有项目从ant转移到gradle。我使用的是Intellij13,通过删除iml文件,我成功地在gradle下运行了一个模块。但是,它坚持编写一个iml文件,该文件的名称与目录名匹配,而不是与模块名匹配 我认识到,对于那些在IDE和版本从高处传下来的大公司中独自工作或在一个团队中工作的人来说,这可能不是一个问题。然而,该项目涉及来自多家公司的各种承包商,他们都提供自己的IDE。Intellij的许可模式使得向外部承包商提供IDE变得不切实际,因为大多数工作都是在场外完成的,一旦您

我正试图将一个现有项目从ant转移到gradle。我使用的是Intellij13,通过删除iml文件,我成功地在gradle下运行了一个模块。但是,它坚持编写一个iml文件,该文件的名称与目录名匹配,而不是与模块名匹配

我认识到,对于那些在IDE和版本从高处传下来的大公司中独自工作或在一个团队中工作的人来说,这可能不是一个问题。然而,该项目涉及来自多家公司的各种承包商,他们都提供自己的IDE。Intellij的许可模式使得向外部承包商提供IDE变得不切实际,因为大多数工作都是在场外完成的,一旦您将许可证密钥分发出去,就无法收回或取消授权

由于升级Intellij不是免费的,几乎不可能协调每个人同时升级,因此我使用基于文件的项目格式,一个名为
ourproject.ij12.ipr1
的项目文件和另一个名为
ourproject.ij13.ipr
的项目文件以及目录
foo
中模块的iml文件是
foo.ij12.iml
foo.ij13.iml

这非常有效,而且政策是每个人在14出来之前都必须从12出来,这样我们就不会有无限多的版本在运行,但我们也不必在纳秒之间同步升级

不幸的是,当我试图在intellij的
foo
目录中使用build.gradle时,它会写入
foo.iml
,这完全打破了上述惯例。此外,它还添加了另一个模块(无需询问),这将导致同一目录中有两个模块,ide不允许您更改任何一个模块,因为同一目录中的两个模块都是错误的

有谁能告诉我在使用gradle时如何影响Intellij为iml文件编写的文件名吗?显然,除非我对symlinks和ant.symlinks任务进行了详细说明,否则使用单独的目录名是行不通的,如果有人试图在windows上以本机方式运行它,这是行不通的

编辑:因为人们似乎习惯于删除他们不被接受的答案,让我澄清一下。我知道gradle的想法eclipse插件。我不是要一本IDE不可知论的指南。我发现IDE设置中有一些有价值的东西,希望使用相同的IDE在其他人之间共享它们(如果“相同”包括版本,则不需要跨版本共享,但一次可以共享多个版本)

更具体地说,我正在寻找其中一种:

  • 允许我控制iml文件名的配置或技巧
  • 维护两个版本的ide文件的另一种方法,不是太拜占庭式
  • 来自JetBrains的一位参与人的确认,这样就没有办法用IDEA实现我的目标了

EDIT2:涉及gradle生成文件的解决方案不起作用。Intellij 13更改文件名以匹配目录名而不是模块名,这是问题的根源。我需要一个说服Intellij不要这么做的解决方案在升级到13之前,我没有遇到任何问题。

使用idea插件,我能够让它根据命令行参数为我生成两个iml文件。这是我创建的(最小)
build.gradle
文件

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

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

idea {
    module {
    name = imlName
    }
}
默认情况下,此脚本将为您生成一个“13”文件。因此,要进行更改,您需要设置
generate12
属性

我运行的命令:

> gradle idea
> gradle idea -Pgenerate12=true
> ls
  build.gradle  test.ij12.iml test.ij13.iml test.ipr test.iws
文档可能会为您提供一些更有用的东西

旁注:
我认为最好是将没有iml文件的项目交给所有人,并告诉他们运行
gradle idea
(没有自定义iml名称)来创建文件。这将允许您不必维护将被IntelliJ修改和覆盖的文件。我们签入iml文件,当有人签入某个文件并为每个人破坏它时,它只会导致问题。

对此似乎没有一个好的答案。我已经在YouTrack中把它作为bug归档了

使用settings.gradle文件更改模块名称。Intellij应该使用它。 接下来,可以使用gradle.properties设置前缀

例如。 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

请参见

上的配置截图以下网站提供了更多信息,如果有帮助->,这些都是好东西,但似乎都不能解决我的实际问题(除非我遗漏了什么)。很有趣,但文件名不是重点。关键是要有一个功能和设置为12的文件,另一个功能和设置为13。在您建议的解决方案中,两个生成的文件之间没有区别。还要注意,test.ij12.ipr和test.ij13.ipr也是必要的。。。。我的经验是,即使Intellij13最初读取名为test.ij13的文件,它也会开始为test目录中的模块编写test.iml。我需要intellij内部的解决方案,否则这种行为将排除任何外部解决方案。因此,您想知道如何在一个目录中包含多个项目文件(iml、ipr等),仅使用intellij配置,以便在打开项目文件(12或13)时它会用名称打开正确的文件?我并不关心文件来自哪里,但问题是intellij重新命名了文件。至于gradle标签,虽然解决方案可能不包含gradle代码,但这个问题确实涉及到gradle,并且与gradle有关。我越来越认为解决方案并不存在。我应该把它作为一个问题发布在YouTrack上。