我写了一个项目,使用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里面的似乎都能正常使用。

懒使人进步(~ ̄▽ ̄)~

我能想到的,最大的成功就是无愧于自己的心。