2

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

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

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

[更新] NetBeans 7.4对此进行了改进,但如前所述,仍然存在一些问题。

4

1 回答 1

3

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

结构:

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

BarextendsFoo所以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-pluginand mvn idea:idea。该模块自 2008 年以来未更新。

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述


结论

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

于 2013-06-12T07:20:37.240 回答