Maven - 添加一个 Maven 模块作为对其他 Maven 模块的依赖
Maven - Add a maven module as dependency to other maven module
我有 2 个 Spring 启动 maven 项目(模块 A、模块 B)。它们都作为模块添加到 parent 项目中。这两个模块都有一些共同的依赖关系和 java 类(域 objects),所以我创建了第三个模块模块 C,并将所有共同的 java 文件和依赖关系放在那里。
我将模块 C 添加到 parent pom 作为模块之一。并将模块 C 添加为模块 A 和模块 B 的依赖项。在模块 A 中,无论模块 C 的 类 在哪里被引用,B 都已解决并指向模块 C 类(在 ctrl+click 上).Eclipse 中没有显示错误,并且更新了 Maven 依赖项。但是,当我从 Parent pom 或单独构建模块 A(在构建模块 c 之后)构建项目时,我在引用模块 C 类 的地方出现 cannot find symbol
错误。
下面是我pom.xml的
Parent 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">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.services</groupId>
<artifactId>cloud-services</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>ModuleC</module> <!-- Project where common dependencies and Common java classes are placed -->
<module>ModuleA</module>
<module>ModuleB</module>
</modules>
</project>
模块 C Pom.xml - 普通项目
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example.services</groupId>
<artifactId>cloud-services</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ModuleC</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ModuleC</name>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
</project>
模块 A Pom.xml - 模块 C 的依赖项目
<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.example.services</groupId>
<artifactId>cloud-services</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ModuleA</artifactId>
<dependencies>
<!-- Project where common dependencies and Common java classes are placed -->
<dependency>
<groupId>com.example.services</groupId>
<artifactId>ModuleC</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
模块 B Pom.xml
Same as ModuleA.
我的配置有什么问题。任何帮助深表感谢。谢谢。
我猜 spring-boot-starter-parent
是罪魁祸首。
通过将它用作父 POM 的父 POM,您可以使用它构建所有模块。 AFAIK,使用 spring-boot-starter-parent
构建的 jars 不能用作依赖项,因为 类 被移动到 jar 中的不同目录。
由于我不是 Spring 专家,因此我无法真正为您提供好的解决方案。
如果它是一个 spring 项目,jar 的根文件夹将是 BOOT-INF。
如果您创建一个普通的项目 jar,它不会有 BOOT-INF。
它的工作方式是如果你有一个项目 A 并且它依赖于 x.jar
假设项目 A 需要 x.jar 中的 com.x.y.ClassA.class 它将使用此路径 x/y/ClassA.class.[=10 在 x.jar 的根文件夹中搜索=]
在你的情况下,因为它是一个 spring 项目,决议没有奏效,它正在抱怨。
我有 2 个 Spring 启动 maven 项目(模块 A、模块 B)。它们都作为模块添加到 parent 项目中。这两个模块都有一些共同的依赖关系和 java 类(域 objects),所以我创建了第三个模块模块 C,并将所有共同的 java 文件和依赖关系放在那里。
我将模块 C 添加到 parent pom 作为模块之一。并将模块 C 添加为模块 A 和模块 B 的依赖项。在模块 A 中,无论模块 C 的 类 在哪里被引用,B 都已解决并指向模块 C 类(在 ctrl+click 上).Eclipse 中没有显示错误,并且更新了 Maven 依赖项。但是,当我从 Parent pom 或单独构建模块 A(在构建模块 c 之后)构建项目时,我在引用模块 C 类 的地方出现 cannot find symbol
错误。
下面是我pom.xml的
Parent 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">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.services</groupId>
<artifactId>cloud-services</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>ModuleC</module> <!-- Project where common dependencies and Common java classes are placed -->
<module>ModuleA</module>
<module>ModuleB</module>
</modules>
</project>
模块 C Pom.xml - 普通项目
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example.services</groupId>
<artifactId>cloud-services</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ModuleC</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ModuleC</name>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
</project>
模块 A Pom.xml - 模块 C 的依赖项目
<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.example.services</groupId>
<artifactId>cloud-services</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ModuleA</artifactId>
<dependencies>
<!-- Project where common dependencies and Common java classes are placed -->
<dependency>
<groupId>com.example.services</groupId>
<artifactId>ModuleC</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
模块 B Pom.xml
Same as ModuleA.
我的配置有什么问题。任何帮助深表感谢。谢谢。
我猜 spring-boot-starter-parent
是罪魁祸首。
通过将它用作父 POM 的父 POM,您可以使用它构建所有模块。 AFAIK,使用 spring-boot-starter-parent
构建的 jars 不能用作依赖项,因为 类 被移动到 jar 中的不同目录。
由于我不是 Spring 专家,因此我无法真正为您提供好的解决方案。
如果它是一个 spring 项目,jar 的根文件夹将是 BOOT-INF。
如果您创建一个普通的项目 jar,它不会有 BOOT-INF。
它的工作方式是如果你有一个项目 A 并且它依赖于 x.jar
假设项目 A 需要 x.jar 中的 com.x.y.ClassA.class 它将使用此路径 x/y/ClassA.class.[=10 在 x.jar 的根文件夹中搜索=]
在你的情况下,因为它是一个 spring 项目,决议没有奏效,它正在抱怨。