我写了一个项目,使用SpringBoot,这是一个单一功能的项目,它只提供一个功能,知识图谱。
现在,我想把它集成在一个综合的项目里面,直接把代码复制过去,可以,但不优雅,我想要一个比较优雅的方法,之后也好维护。
在Java中,代码可以打包到Jar包,项目可以直接用Jar包里面的代码,就像用自己写的一样,各种库似乎都是通过这种方法导入使用的(废话)
(以下完全针对于Maven)
配置项目
要先把被导入的项目打个包,但是不能直接拿项目打包,直接打出来的包是不能用的,pom文件需要做如下修改:
在<plugins>内:
修改前:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>修改后:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>(PS: 可以创建多个pom文件,然后在IDEA里面添加新配置文件)
看别人写的,此处要剔除掉启动类,但似乎并没有必要。如果是写Kotlin(我),好像还不能剔除(没找到方法)。
第一种方法
我个人不推荐这种方法,感觉这种方法更适合用来处理来路不明的Jar包
执行被导入项目Maven生命周期中的package,会在项目目录的target 目录里生成Jar包,将此Jar包放到喜欢的地方。( •̀ ω •́ )✧
在需要导入到的项目,pom内添加如下依赖项:
<dependency>
<groupId>XXX.XXX</groupId>
<artifactId>XXX</artifactId>
<version>XXX</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/XXX.jar</systemPath>
</dependency>然后这个方法还要手动添加被导入项目的依赖。
第二种方法
执行被导入项目Maven生命周期中的install,这会将这个项目的Jar包和其他信息放到本地仓库内(默认电脑C盘)
在需要导入到的项目,pom内添加如下依赖项:
<dependency>
<groupId>XXX.XXX</groupId>
<artifactId>XXX</artifactId>
<version>XXX</version>
</dependency>使用导入项目的Bean
把项目导入过来了,被导入的项目内是有控制器、服务什么的,我们希望这些东西可以生效。
到启动类,首先删除@SpringBootApplication 注解,然后添加下面的注解
@EnableAutoConfiguration
@Configuration
@ComponentScan(
basePackages = [
"XXX.XXX", // 当前项目包名
"XXX.XXX.controller",
"XXX.XXX.model",
"XXX.XXX.service",
]
)这样SpringBoot会去扫描导入的Bean,但是应该要避开全局配置类(错误处理器什么的)
比意料中的顺利,导入的Jar包resources内除了SpringBoot的配置文件不加载(这才对嘛),其他mapper.xml,static里面的似乎都能正常使用。
懒使人进步(~ ̄▽ ̄)~