需求背景
在項(xiàng)目開(kāi)發(fā)過(guò)程中,總會(huì)有一些公共的代碼慷嗜,會(huì)被抽取到一個(gè)單獨(dú)的模塊當(dāng)中颂斜,其他的項(xiàng)通過(guò)引入該項(xiàng)目的jar包夫壁,達(dá)到代碼復(fù)用的目的,近期在學(xué)習(xí)springboot相關(guān)知識(shí)沃疮,正好也遇到這種場(chǎng)景盒让,但是引入公共的模塊時(shí),打包項(xiàng)目總是提示找不到公共項(xiàng)目中的相關(guān)類司蔬,下面就說(shuō)說(shuō)問(wèn)題產(chǎn)生的原因和解決的辦法邑茄。
代碼示例
首先,創(chuàng)建一個(gè)公共的maven項(xiàng)目俊啼,artifactId:common肺缕,在其中添加一些公共的類,執(zhí)行 mvn clean授帕、mvn install命令
然后再創(chuàng)建一個(gè)maven項(xiàng)目同木,比如:springmvc(名字大家隨便取),引入common的依賴
<dependency>
<groupId>com.sherman</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
編譯springmvc項(xiàng)目跛十,結(jié)果提示如下的錯(cuò)誤信息:
截圖中的錯(cuò)誤提示都是我在common模塊中定義的類彤路,但是在springmvc項(xiàng)目中卻提示找不到,這個(gè)問(wèn)題是由于我在common項(xiàng)目中指定了spring-boot-maven-plugin
這個(gè)插件生成jar包
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.sherman.common.CommonApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
然后我把這個(gè)插件去掉芥映,重新對(duì)common項(xiàng)目執(zhí)行命令:mvn clean洲尊、mvn install,接著再重新編譯springmvc項(xiàng)目奈偏,問(wèn)題解決坞嘀。
如果運(yùn)行springmvc項(xiàng)目提示“Consider defining a bean of type 'xxxx' 類似的錯(cuò)誤信息,需要在springmvc項(xiàng)目的啟動(dòng)中添加@ComponentScan
注解
package com.example.springmvc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.sherman.common"})
public class SpringmvcApplication {
public static void main(String[] args) {
SpringApplication.run(SpringmvcApplication.class, args);
}
}
打包區(qū)別
通過(guò)上面的描述惊来,是由于使用了spring-boot-maven-plugin
進(jìn)行打包丽涩,那通過(guò)該插件打包的程序一般是作為獨(dú)立運(yùn)行的jar,直接可以通過(guò)java -jar xxx.jar命令運(yùn)行唁盏,而去掉這個(gè)插件之后就是生成了普通的jar包内狸,只是包含模塊中的代碼,不包含依賴項(xiàng)厘擂,我們也可以通過(guò)觀察生成的jar包文件的大小,來(lái)確認(rèn)是否和描述的一致锰瘸。
使用spring-boot-maven-plugin
插件生成jar的大小如下圖所示:
去掉spring-boot-maven-plugin
之后生成的jar的大小如下圖所示:
希望此文能幫助那些遇到和我一樣問(wèn)題的同學(xué)刽严。