SpringBoot项目打jar包给其他Maven项目引用

背景
springboot项目要怎么打包,才能被其他项目GAV引入 打成springboot的可运行jar是不行的,要用maven插件打包。

例子
springboot项目被 mvn install 打包并安装到本地maven仓库后,被另外一个springboot项目引入,引入后发现JAR包存在却无法import JAR包中的类的问题。详细情况如下

两个项目

A(springboot)
B(springboot)
在这里插入图片描述

A的JAR包,看到了BOOT-INF,其他正常可以用的JAR包是没这个目录的。springboot打包的是springboot特有格式的jar包,即可以运行的fat jar,并不是传统的maven的JAR包,怎么解决

修改A项目的pom.xml,打包插件改一下,使用maven的就行了

<plugins>
    <!--<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>-->


    <!-- 要排除启动类 -->
  	<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source> <!--指明源码用的Jdk版本-->
            <target>1.8</target> <!--指明打包后的Jdk版本-->
            <!-- 如果发现依然排除不了,考虑先clean再install-->
            <excludes>
                <exclude>
                    com/wyf/test/sub/AopFilterSpringinterceptorOrderingApplication.java
                </exclude>
            </excludes>
        </configuration>
    </plugin>
</plugins>

注意点
1、不要将启动类打包进去
注意!注意!注意! 要将启动类排除掉,或删掉或注释掉再打包。

如果不排除,它的@SpringBootApplication注解因包含了@ComponentScan,会导致项目B如果配置扫描jar包路径,并且扫描到这个启动类,会拉起A项目所有bean的实例化。详细的情况见下面的例子

A项目没有将springboot启动类排除并打包给B项目引入,B项目使用如下扫描规则

@ComponentScan(basePackages = {"B项目扫描路径", "A项目路径"},
        excludeFilters = {@ComponentScan.Filter(value = {ClassInA.class}, type = FilterType.ASSIGNABLE_TYPE)})

假设 "A项目路径" 里包含了A项目里的启动类,由于这个启动类有@SpringBootApplication(包含@ComponentScan),会导致 ClassInA 这个被实例化。虽然B项目里是排除ClassInA的实例化的,但是A项目却实例化了ClassInA。最终结果就是B项目的排除没有生效。

这里涉及到两个@ComponentScan(一个在B项目,另一个是A项目由@SpringBootApplication所引入的@ComponentScan),这两个是互相独立起作用的,一个禁止一个允许,最终导致实例化了

2、排除规则不生效怎么办

这个写法不生效 先clean再install

<excludes>
    <exclude>
        com/wyf/test/sub/AopFilterSpringinterceptorOrderingApplication.java
    </exclude>
</excludes>

参考文章:

springboot项目如何打包给其他项目引用_程序员超时空的博客-CSDN博客_springboot项目引用其他项目
springboot打成可以被直接引用的Jar包_草上兔的博客-CSDN博客_springboot 打可运行jar包
 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Vue应用打包成jar,并在Spring Boot项目引用,您可以使用frontend-maven-plugin插件来执行这个任务。下面是一些步骤可以帮助您实现这个目标: 1. 在您的Vue项目根目录下创建一个`pom.xml`文件,并添加以下配置: ```xml <build> <plugins> <!-- frontend-maven-plugin配置 --> <plugin> <groupId>com.github.eirslett</groupId> <artifactId>frontend-maven-plugin</artifactId> <version>1.12.0</version> <executions> <!-- 安装 Node.js 和 NPM --> <execution> <id>install node and npm</id> <goals> <goal>install-node-and-npm</goal> </goals> <configuration> <nodeVersion>v14.17.3</nodeVersion> <npmVersion>6.14.13</npmVersion> </configuration> </execution> <!-- 安装 Vue 依赖 --> <execution> <id>npm install</id> <goals> <goal>npm</goal> </goals> <configuration> <arguments>install</arguments> </configuration> </execution> <!-- 执行 Vue 打包 --> <execution> <id>npm run build</id> <goals> <goal>npm</goal> </goals> <configuration> <arguments>run build</arguments> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 请注意,您需要根据您的项目需求调整`nodeVersion`和`npmVersion`的版本号。 2. 打开终端并导航到您的Vue项目根目录,运行以下命令将Vue应用打包: ```shell mvn clean install ``` 这个命令将触发frontend-maven-plugin插件的执行,它将安装Node.js和NPM,安装Vue依赖,并执行Vue打包。 3. 打包成功后,您将在`target`目录下找到生成的jar文件。将该jar文件复制到您的Spring Boot项目中,并将其作为依赖添加到Spring Boot项目的`pom.xml`文件中。 ```xml <dependency> <groupId>your.groupId</groupId> <artifactId>your-artifactId</artifactId> <version>your-version</version> <scope>runtime</scope> </dependency> ``` 请记得将`your.groupId`、`your-artifactId`和`your-version`替换为您实际的值。 4. 在Spring Boot项目中,您可以使用`org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration`类中的`addResourceHandlers()`方法来配置静态资源的处理。添加以下代码: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/static/") .setCachePeriod(0); } } ``` 这将使Spring Boot能够正确地处理静态资源路径。 现在,您可以重新构建并运行Spring Boot项目,Vue应用将作为静态资源打包在jar中,并能够在Spring Boot应用中访问。 请注意,这只是一种将Vue应用打包成jar并在Spring Boot项目引用的方法。根据您的具体需求和项目结构,可能需要进行一些调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值