使用NetBeans和Maven时,一切都很好,除了多个maven项目的轻微麻烦。想象一下,我的“工具”模块依赖于“核心”模块。为了使用“工具”中最近更改的“核心”,我必须重新安装“核心”。
或者我应该切换到其他IDE?但是IntelliJ和Eclipse似乎也有问题(这是真的吗?)。你是怎么做到的?
当然,这应该适用于运行,调试和测试项目。
[更新] NetBeans 7.4 has improved on this但仍然存在一些问题。
答案 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-plugin
和mvn idea:idea
。自2008年以来,该模块尚未更新。
确保选中Make project automatically
(与编译保存相同)。
现在这里是代码示例,一切看起来都不错(没有编译错误)。
现在我将getText()
方法更改为getTextMessage()
类中的Foo
并等待几秒钟(无需保存等待自动保存然后自动编译)结果显示在这里。
<强>结论强>
IntelliJ可以动态处理其他maven模块的更改。即使使用compile-on-save,依赖模块中的任何更改都会立即反映出来。