@[TOC](2022-03-31 多模块打包:dubbo项目打包 解决Error:(6,40) java: 找不到符号、Error:(6,42) java: 程序包com.xxxx.xxxx.webservice.pojo.data不存在问题)
问题描述
当想对多个模块打包时,出现找不到符号或者程序包不存在问题。
这里是一个spring cloud alibaba + zk + dubbo的一个demo小案例。
consumer和provider都引用了api模块,导致在打包时找不到引用api模块的类
解决方法
模块之间的关系
父模块pom
父模块里不要写plugins,因为子模块会继承父模块的plugins,具体的子模块plugins,在子模块pom进行编写。
api子模块pom
<build>
<plugins>
<!-- 只编译,不会导入相关依赖-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!--<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!–生命周期中测试插件 跳过测试–>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>-->
</plugins>
</build>
consumer子模块pom
<build>
<plugins>
<!--<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--生命周期中测试插件 跳过测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
provider子模块pom
<build>
<plugins>
<!--<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--生命周期中测试插件 跳过测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
打包
配好plugins之后,找到maven-root,选中clean、package,然后点击上面的绿色运行按钮。当然也可以先双击clean,再双击package(右键-run)都是可以的。
至此子模块就都打包完成了,我这里是dubbo_demo,所以需要将provider和consumer单独跑起来。
在jar包里也有了api模块的jar包
总结
主要是解决maven多模块打包的问题。
使用了两个打包插件。
- maven-compiler-plugin:只进行编译(编译我所写的源代码),产生的jar里不会有其它依赖(jar包),这里也符合我的需求,在api模块只有接口和javaBean对象。
- spring-boot-maven-plugin:spring-boot的打包工具,帮助我们使用java -jar进行运行(为了能够运行,会帮我们导入所依赖的jar包到我们的jar下)。