添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

父工程不正确地使用 spring-boot-maven-plugin 插件,导致“被依赖模块”例如(common模块),被打成可执行jar( flat jar );web模块无法从 flat jar 中按照约定的目录结构找到需要的类。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <skipTests>true</skipTests>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>    

二、解决办法

1.方法1

父工程和基础模块使用maven-compiler-plugin插件打包,web模块因为需要打成可执行jar,再使用spring-boot-maven-plugin打包。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <skipTests>true</skipTests>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>    
  • web模块(可执行jar)
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2.方法2

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <skipTests>true</skipTests>
    </properties>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<classifier>exec</classifier>
					<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中 -->
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project> 

官方文档
maven 多module环境下打包出现找不到包的解决方案

记-maven 多模块项目运行正常但是打包提示被依赖模块类找不到的问题文章目录记-maven 多模块项目运行正常但是打包提示被依赖模块类找不到的问题一、原因二、解决办法1.方法12.方法2一、原因父工程不正确地使用spring-boot-maven-plugin插件,导致“被依赖模块”例如(common模块),被打成可执行jar(flat jar);web模块无法从flat jar中按照约定的目录结构找到需要的类。&lt;?xml version="1.0" encoding="UTF-8"?& 1.springboot多模块maven父子工程,B模块依赖了A, A打包问题,之后打包B,报错依赖的A中的包不到,但是idea里导入都是好的,没有报错。 2.解决:BOOT-INF的坑 在多module的环境下,jar包之间相互依赖,这时候打包的时候就会有先后顺序的问题。 在项目开发后打包的时候发现通过原始建立的多module的项目会出现问题; 原始的spri... 2. 问题 使用idea打包的时候编译偶尔成功偶尔失败,本地运行能成功,有时能打包成功但是发现使用 jar 包跑的时候会出现不到的情况,最终经过排查发现有部分的打包的时候打包不进去。 3. 解决办法 关闭idea,到对应项目的目录删除 .idea 文件,让 idea 去重构项目 删除 Maven 本地仓库下当前项目的对应 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId>
SpringBoot默认打包是可执行的jar包,其他模块无法引用,原因: spring-boot工程打包编译时,会生成两种jar包,一种是普通的jar,另一种是可执行jar。默认情况下,这两种jar的名称相同,在不做配置的情况下,普通的jar先生成,可执行jar后生成,所以可执行jar会覆盖普通的jar。 在plugin配置spring-boot-maven-plugin中增加如下配置,这样可以打可执行jar包和普通jar包: <build> <plugins>
打包install公共模块的时候,打包失败,会出现报错信息。报错:Unable to find main class 原因:在maven编译这个工程模块的时候,尝试去模块main方法的class文件,但是我这个是一个公共服务模块,不需要启动项目,索引不需要main方法文件。 解决:在该工程模块的pom.xml中,添加下面的配置进行过滤即可即可。 添加后,再install就成功了: 添加后,再install就成功了,:
1. 打开项目中的pom.xml文件。 2. 在文件中到<dependencies>标签,该标签用于管理项目依赖。 3. 在<dependencies>标签中,添加一个<dependency>标签,用于引入其他模块依赖。 4. 在<dependency>标签中,填写要引入的模块Maven坐标信息,包括groupId、artifactId和version等。 例如:要引入Spring Web模块,可以添加以下代码: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.1</version> </dependency> 这样就会在项目中引入Spring Web模块的相关依赖。 5. 保存pom.xml文件,Maven会自动下载并引入所需的依赖。 需要注意的是,如果被引入的模块也是一个Spring Boot项目,且在同一个工程中,可以在pom.xml中使用<modules>标签声明模块之间的关系,并指定模块的相对路径。这样,在执行Maven构建时,会自动构建并引入这些模块。 另外,如果要引入的模块不在Maven中央仓库中,可以在pom.xml中配置其他的仓库地址,以便Maven能够下载到这些模块依赖。 通过以上步骤,我们就可以在Spring Boot项目中引入其他模块Maven依赖。这样可以帮助我们通过直接引入现有的模块来简化开发工作,并提高项目的可维护性和可扩展性。