java - Intellij & Gradle 模块文件名

标签 java ant intellij-idea gradle

我正在尝试将现有项目从 ant 转移到 gradle。我正在使用 Intellij 13,并且通过删除 iml 文件设法让一个模块在 gradle 下运行。但是,它坚持编写一个名称与目录名称而不是模块名称匹配的 iml 文件。

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

由于升级 Intellij 不是免费的,所以协调大家一次升级几乎是不可能的,所以我使用基于文件的项目格式,项目文件名为 ourproject.ij12.ipr1,另一个名为ourproject.ij13.ipr 和目录 foo 中模块的 iml 文件是 foo.ij12.imlfoo.ij13 .iml

这很好用,政策是每个人都可以在 14 岁之前离开 12要么。

不幸的是,一旦我尝试在 intellij 的 foo 目录中使用 build.gradle,它就会写入 foo.iml,这完全打破了上述约定。此外,它添加了另一个模块(不询问),这导致同一目录中有两个模块,ide 不会让您更改任何一个,因为同一目录中的两个模块是错误的。

谁能告诉我在使用 gradle 时如何影响 Intellij 为 iml 文件写入的文件名?显然,除非我对符号链接(symbolic link)和 ant.symlinks 任务非常详尽,否则拥有单独的目录名称是行不通的,如果有人试图在 Windows 上本地运行它,那将无法工作。

编辑:由于人们似乎习惯于删除他们不接受的答案,所以让我澄清一下。我知道 gradle idea eclipse 插件。我不是在寻求 IDE 不可知论者的指南。我发现 IDE 设置中有一些有值(value)的东西,并希望使用相同的 IDE 与其他人共享它们(其中“相同”包括版本,预计不会跨版本共享,但一次可以共享多个版本)。

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

  • 允许我控制 iml 文件的文件名的配置或技巧
  • 维护两个版本的 ide 文件的另一种方法,不太繁琐。
  • 来自一位参与 SO 的 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

idea module文档可能有一些对您更有用的东西。

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

关于java - Intellij & Gradle 模块文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21027906/

相关文章:

ant - 如何在 Ant concat 中保留文件顺序?

java - 无法运行 IntelliJ - NoClassDefFoundError : Could not initialize class sun. awt.X11GraphicsEnvironment

java - 使用 API 和服务帐户创建的新日历不可见

ant - 在典型的 ant 构建文件中有哪些默认目标?

java - 将所有子目录合并到一个 jar 中

intellij-idea - 列出所有其他快捷方式的 Intellij 想法键盘快捷键是什么

git - 配置 IntelliJ IDEA 以始终忽略由 Maven Release Plugin 在 target/checkout 创建的 Git Roots

java - 从桌面快捷方式运行 bash 脚本时保持终端打开

java - 是否有 jarsigner 的纯 java 或独立可部署实现?

java - 关于传递 HashMap 引用的基本问题