这就是它在 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-plugin 和mvn idea:idea。该模块自 2008 年以来未更新。
确保选中 Make project automatically(与 compile-on-save 相同)。
现在是代码示例,一切看起来都不错(没有编译错误)。
现在我将 Foo 类中的 getText() 方法更改为 getTextMessage() 并等待几秒钟(无需保存,只需等待自动保存然后自动编译),结果显示在这里。
结论
IntelliJ 可以即时处理其他 maven 模块中的更改。即使在使用 compile-on-save 时,依赖模块中的任何更改都会立即反映出来。