您现在的位置是:主页 > news > wap手机网站建设/项目推广

wap手机网站建设/项目推广

admin2025/4/30 18:52:44news

简介wap手机网站建设,项目推广,做游戏小网站是啥,南昌网站建设制作与维护本文将介绍,如何将 Spring 应用如何打包为可执行的 jar ,以及在打包、执行 jar 中遇到的问题和解决方案。 场景: 现有一需求,需要把通过 Spring MyBatis Maven 构建的非 Web 应用,打包为一个 jar 包,提供…

wap手机网站建设,项目推广,做游戏小网站是啥,南昌网站建设制作与维护本文将介绍,如何将 Spring 应用如何打包为可执行的 jar ,以及在打包、执行 jar 中遇到的问题和解决方案。 场景: 现有一需求,需要把通过 Spring MyBatis Maven 构建的非 Web 应用,打包为一个 jar 包,提供…

  本文将介绍,如何将 Spring 应用如何打包为可执行的 jar ,以及在打包、执行 jar 中遇到的问题和解决方案。

场景:

  现有一需求,需要把通过 Spring + MyBatis + Maven 构建的非 Web 应用,打包为一个 jar 包,提供给线上通过 java 命令来执行。

问题及解决方案

1. 打包插件的选择

  正常方式搭建、开发 Spring、MyBatis 等相关代码和依赖。构建完成后,重点注意 pom.xml 文件中 build 标签内的插件。

使用含 bug 的 maven-assembly-plugin

   assembly 插件在通过 mvn clean package 打包完成后,运行jar包文件,由于在公司内网,会报一些 spring.xml 文件内,**.xsd 文件找不到的问题,如
通配符的匹配很全面, 但无法找到元素 ‘context:component-scan’ 的声明 同类型的错误。

  关于 ** .xsd 文件的加载细节,可以参考这篇文章的介绍。
在这里插入图片描述
在这里插入图片描述
  当我们发现 jar 包在执行时,**.xml 抛出一些 **.xsd 文件找不到的错误时,可以打开 jar 包,./META-INF/spring.schemas 文件中查看,是否含有需要的 xsd 文件及对应的文件。

推荐使用 maven-shade-plugin 打包

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.handlers</resource></transformer><transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.schemas</resource></transformer><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.xxx.MainClass</mainClass></transformer></transformers></configuration></execution></executions>
</plugin>

配置完 pom 后,调用 mvn clean install 命令进行构建,所有的 **.xsd 文件都会被打包,并以 key-value 的形式,记录在 ./META-INF/spring.schemas 文件中。所有的 **.xsd 文件都在这个文件里记录了存储路径,如果没有,应用将会通过网络地址去查找,如果还是查找不到,就会抛出对应的错误。

  构建成功后 target 目录,生成2个jar包,一个为:original-XXX-0.0.1-SNAPSHOT.jar,另一个为:XXX-0.0.1-SNAPSHOT.jar。其中 original…jar里只包含了工程自己的class文件,而另外的一个jar包则包含了工程本身以及所有依赖的jar包的class文件。

  我们只需要使用第二个jar包就可以了。

2. jar 包内配置文件访问的问题

   jar包内的配置文件,已经不能使用 new File(“filePath”) 方式来寻找了,因为文件路径已经变成 ** .jar!/ **,这种格式并不是文件资源定位符的格式。
   如果需要让 jar 中的代码读取到自己的资源文件,可以通过 YourClassName.class.getResourceAsStream("/abc.conf"); 方法来获取到文件的输入流,进而获取到文件内容。