【问题标题】:IDE where compile-on-save works in a multi modules maven project保存时编译在多模块 Maven 项目中工作的 IDE
【发布时间】:2013-06-08 04:31:55
【问题描述】:

使用 NetBeans 和 Maven 时,一切都很好,除了多 maven 项目的小麻烦。想象一下,我有依赖于“核心”模块的“工具”模块。为了使用“工具”中最近更改的“核心”,我必须重新安装“核心”。

或者我应该切换到不同的 IDE 吗?但是IntelliJEclipse 似乎也有问题(这是真的吗?)。你是怎么做到的?

当然,这应该适用于运行、调试和测试项目。

[更新] NetBeans 7.4 has improved on this 但如上所述仍然存在一些问题。

【问题讨论】:

  • 但 IntelliJ 和 Eclipse 似乎也有问题。 你这是什么意思?你的意思是他们有你描述的同样的问题(这是错误的)?或者他们有其他问题(这可能肯定是真的,但什么软件没有问题)?
  • 从我链接的帖子中,我可能得到了错误的印象。我并不是说一般有问题(仅与 compile-on-save+multi 模块有关)。例如。对于同事,他的 IntelliJ 和这个 CoS+mm 不起作用。或者你有这样的设置指针?
  • 我一直不明白为什么compile-on-save 如此重要。在 IntelliJ 12 中也引入了它,但通常在 IntelliJ 中,您只需按 Ctrl+F9(构建)即可保存所有未保存的文件并构建所有这些文件。 IntelliJ 处理多模块 maven 项目就像一个魅力。您在一个模块中所做的所有更改都会立即反映在相关模块中。不用mvn install
  • 好的,仅供参考,论坛帖子中报告的问题仅与基于 netbeans 平台的应用程序执行有关。
  • @mkleint 这行得通!不错!

标签: eclipse maven netbeans intellij-idea


【解决方案1】:

这就是它在 IntelliJ 中与 maven 多模块项目的工作方式。

结构:

. ├── pom.xml ├── 模块-1 | ├── pom.xml | └── 源 | └── 主要 | └── java | └── com | └── 堆栈溢出 | └── 富 | └── Foo.java └── 模块-2 ├── pom.xml └── 源 └── 主要 └── java └── com └── 堆栈溢出 └── 酒吧 └── Bar.java

Bar 扩展Foo 所以module-2 依赖于module-1

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.stackoverflow</groupId>
<artifactId>multi-module-idea</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<name>${project.artifactId}-${project.version}</name>

<properties>
    <mainClass/>
    <argument/>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<modules>
    <module>module-1</module>
    <module>module-2</module>
</modules>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.stackoverflow</groupId>
            <artifactId>module-1-idea</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
</dependencies>

</project>

module-1\pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.stackoverflow</groupId>
        <artifactId>multi-module-idea</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>module-1-idea</artifactId>

    <name>${project.artifactId}-${project.version}</name>

</project>

module-2\pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.stackoverflow</groupId>
        <artifactId>multi-module-idea</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>module-2-idea</artifactId>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
        <mainClass>maba.java.module2.App</mainClass>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.stackoverflow</groupId>
            <artifactId>module-1-idea</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

当这个项目被加载到 IntelliJ(通过File | Open... 并指向根目录下的pom.xml)时,它将自动设置所有模块依赖项。 注意 禁止使用maven-idea-pluginmvn idea:idea。该模块自 2008 年以来未更新。

确保选中 Make project automatically(与 compile-on-save 相同)。

现在是代码示例,一切看起来都不错(没有编译错误)。

现在我将 Foo 类中的 getText() 方法更改为 getTextMessage() 并等待几秒钟(无需保存,只需等待自动保存然后自动编译),结果显示在这里。


结论

IntelliJ 可以即时处理其他 maven 模块中的更改。即使在使用 compile-on-save 时,依赖模块中的任何更改都会立即反映出来。

【讨论】:

  • 一个快速的问题:是否需要依赖管理 + 对父 pom 中 module-1 的依赖?
  • @Karussell 这只是我的一个习惯。它简化了 Maven 版本。您不必在module-2-idea pom 文件中指定module-1-idea 的版本。至少它曾经是 maven 版本的一个问题,它无法在多模块项目中找到将版本从 -SNAPSHOT 更新到稳定版本的所有位置。如前所述,这只是我的习惯。它也应该通过直接在模块 pom 中使用版本来工作。
  • 我对intelliJ不熟悉,如何为maven创建运行配置?运行按钮是灰色的..但是当为一个文件点击“运行”时,这个自动构建适用于多个项目:)!
  • 您必须按下运行按钮左侧的小下拉菜单。这是一个小箭头v,一旦配置完成,就会显示所有运行配置。
猜你喜欢
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2011-03-25
  • 1970-01-01
  • 2012-09-29
  • 2011-07-21
相关资源
最近更新 更多