使用 NetBeans 和 Maven 时,一切都很好,除了多 maven 项目的小麻烦。想象一下,我有依赖于“核心”模块的“工具”模块。为了使用“工具”中最近更改的“核心”,我必须重新安装“核心”。
还是我应该切换到不同的 IDE?但是IntelliJ和Eclipse似乎也有问题(这是真的吗?)。你怎么做呢?
当然,这应该适用于运行、调试和测试项目。
[更新] NetBeans 7.4对此进行了改进,但如前所述,仍然存在一些问题。
这就是它在 IntelliJ 中与 maven 多模块项目的工作方式。
结构:
. ├── pom.xml ├── 模块-1 | ├── pom.xml | └── 源 | └── 主要 | └── java | └── com | └── 堆栈溢出 | └── 富 | └── Foo.java └── 模块-2 ├── pom.xml └── 源 └── 主要 └── java └── com └── 堆栈溢出 └── 酒吧 └── Bar.java
Bar
extendsFoo
所以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-plugin
and mvn idea:idea
。该模块自 2008 年以来未更新。
确保Make project automatically
已选中(与 compile-on-save 相同)。
现在这里是代码示例,一切看起来都不错(没有编译错误)。
现在我将getText()
方法更改为getTextMessage()
在Foo
类中并等待几秒钟(无需保存,只需等待自动保存然后自动编译),结果显示在此处。
结论
IntelliJ 可以动态处理其他 maven 模块中的更改。即使在使用 compile-on-save 时,依赖模块中的任何更改都会立即反映出来。