IDE中的compile-on-save在多模块maven项目中工作

时间:2013-06-12 06:40:10

标签: eclipse maven netbeans intellij-idea

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

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

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

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

1 个答案:

答案 0 :(得分:3)

这是在使用maven多模块项目的IntelliJ中的工作方式。

结构:

.
├── pom.xml
├── module-1
|   ├── pom.xml
|   └── src
|       └── main
|           └── java
|               └── com
|                   └── stackoverflow
|                       └── foo
|                           └── Foo.java
└── module-2
    ├── pom.xml
    └── src
        └── main
            └── java
                └── com
                    └── stackoverflow
                        └── bar
                            └── 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)时,它将自动设置所有模块依赖项。 NB 禁止使用maven-idea-pluginmvn idea:idea。自2008年以来,该模块尚未更新。

enter image description here

确保选中Make project automatically(与编译保存相同)。

enter image description here

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

enter image description here

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

enter image description here


<强>结论

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