我们有个公共类库,编译成jar包,供其他项目调用。
然鹅,有一个项目也编译成一个jar包,以命令行的方式运行,结果提示找不到这个公共类库。
打开项目jar包,里面是有公共类库jar包的。只不过,它没有跟一般的jar包放在一起,比如放在
BOOT-INF\lib
而是放在了
BOOT-INF\classes\libs
估计就是这个原因,运行时找不到了。为什么放在这里,就找不到呢?不知道。我目前还不知道原因。但是,开发阶段,在idea里运行就好好的。看来还是打包的问题。
为啥公共类库包会放在BOOT-INF\classes\libs
呢?原因是依赖的方式是这样写的:
<dependency>
<groupId>com.monkey</groupId>
<artifactId>lt-framework</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/libs/lt-framework-1.0.0.jar</systemPath>
</dependency>
这样做的好处是,多人开发的情况下,这个依赖包的版本是一致的。当然,将包发布到内部仓库也可以,但我们没搞这个东东。总之吧,用了上面说的,在本地文件夹寻找包的依赖方式,毛病出来了,怎么办?
其实就是在pom.xml的build里声明一下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
这样子发布以后,公共包也会拷贝一份到BOOT-INF\lib
(BOOT-INF\classes\libs
还是有,浪费,不知怎么设置去掉),运行正常。