Maven多模块构建jobs模块报错:package com.project.web.rest不存在
解决Jobs模块构建时无法引用Web模块类的问题
嘿,我一眼就看出问题出在哪了——你Jobs模块依赖的Web模块是war类型,而Maven默认不会从WAR包中加载编译后的Java类,这就是构建时提示package com.project.web.rest does not exist的核心原因。IDE能识别import是因为它直接关联了Web模块的源码,但Maven构建时只会把WAR包当作Web应用归档,不会自动解析里面的WEB-INF/classes目录下的类文件。
下面给你几个靠谱的解决方案,按推荐程度排序:
方案1:让Web模块同时生成可依赖的JAR包(推荐)
修改Web模块的pom.xml,配置Spring Boot Maven插件生成一个普通的JAR包(用于其他模块依赖)和一个可执行的WAR包(用于部署):
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定可执行WAR包的classifier,这样会额外生成一个不带该标识的普通JAR包 --> <classifier>exec</classifier> </configuration> </plugin> </plugins> </build>
配置完成后,Web模块构建时会生成两个文件:
project-web-${version}.war:可直接部署的Spring Boot WAR包project-web-${version}.jar:包含所有编译类的普通JAR包,适合其他模块依赖
然后修改Jobs模块中Web模块的依赖,把type改成jar:
<dependency> <groupId>com.project</groupId> <artifactId>project-web</artifactId> <version>${project.version}</version> <type>jar</type> </dependency>
方案2:直接依赖Web模块的编译输出(适合临时调试)
如果不想修改Web模块的配置,可以在Jobs模块中添加Maven依赖插件,手动将Web模块的target/classes目录添加到编译路径:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <classpathElements> <classpathElement>${project.basedir}/../project-web/target/classes</classpathElement> </classpathElements> </configuration> </plugin> </plugins> </build>
不过这个方案不推荐用于正式环境,因为它依赖本地目录结构,移植性差。
方案3:调整Web模块的打包类型
如果Web模块不需要作为独立的WAR包部署,可以直接把它的packaging改成jar:
<packaging>jar</packaging>
这样Web模块会生成普通JAR包,Jobs模块直接依赖这个JAR包即可,无需额外配置。
最后再确认下父模块的<modules>顺序,确保构建顺序是library→web→database→jobs,这样Web模块的JAR包会在Jobs模块构建前生成好。
内容的提问来源于stack exchange,提问作者Вова Дк
相关产品推荐
相关产品推荐

