springboot 图片压缩-springbootmavenplugin必须要有吗
SpringBoot实现万能文件在线预览,已开源,真香

推荐一个用Spring Boot搭建的文档在线预览解决方案:
kkFileView,一款成熟且开源的文件文档在线预览项目解决方案,对标业内付费产品有【永中office】【office365】【idocv】等,免费!
地址:
地址:
支持所有类型的文本文档预览, 由于文本文档类型过多,无法全部枚举,默认开启的类型如下
txt,html,htm,asp,jsp,xml,json,properties,md,gitignore,log,java,py,c,cpp,sql,sh,bat,m,bas,prg,cmd
文本预览效果如下
文本预览效果如下
支持jpg,jpeg,png,gif等图片预览(翻转,缩放,镜像),预览效果如下
图片预览
支持doc,docx文档预览,word预览有两种模式:一种是每页word转为图片预览,另一种是整个word文档转成pdf,再预览pdf。两种模式的适用场景如下
图片预览模式预览效果如下
word文档预览1
pdf预览模式预览效果如下
word文档预览2
支持ppt,pptx文档预览,和word文档一样,有两种预览模式
图片预览模式预览效果如下
ppt文档预览1
pdf预览模式预览效果如下
ppt文档预览2
支持pdf文档预览,和word文档一样,有两种预览模式
图片预览模式预览效果如下
pdf文档预览1
pdf预览模式预览效果如下
pdf文档预览2
支持xls,xlsx文档预览,预览效果如下
excel文档预览
支持zip,rar,jar,tar,gzip等压缩包,预览效果如下
压缩文件预览1
可点击压缩包中的文件名,直接预览文件,预览效果如下
压缩文件预览2
理论上支持所有的视频、音频文件,由于无法枚举所有文件格式,默认开启的类型如下
mp3,wav,mp4,flv
视频预览效果如下
多媒体文件预览1
音频预览效果如下
多媒体文件预览2
支持CAD dwg文档预览,和word文档一样,有两种预览模式
图片预览模式预览效果如下
cad文档预览1
pdf预览模式预览效果如下
cad文档预览2
考虑说明篇幅原因,就不贴其他格式文件的预览效果了,感兴趣的可以参考下面的实例搭建下
看到这里了,点个赞呗!
springbootmavenplugin必须要有吗

-Version: 1.0
Created-By: Maven Archiver 3.4.0
Build-Jdk-Spec: 11
Implementation-Title: springbootfirst
Implementation-Version: 0.0.1-SNAPSHOT
SpringBoot插件生成的jar包结构为
BOOT-INF/classes 中包含项目所有的class文件,BOOT-INF/lib 下包含项目依赖的第三方jar包,文件内容为
Manifest-Version: 1.0
Created-By: Maven Archiver 3.4.0
Build-Jdk-Spec: 11
Implementation-Title: springbootfirst
Implementation-Version: 0.0.1-SNAPSHOT
Main-Class:
Start-Class:
Spring-Boot-Version: 2.1.6.RELEASE
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
插件是如何找到启动类的
描述文件中的Start-Class就是我们项目的启动类,我们可以查看插件源码来分析
<dependency>
<groupId></groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId>spring-boot-loader</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
先引入插件的maven依赖
RepackageMojo就是repackage打包要执行的逻辑,核心类为Repackager
在插件创建文件过程中,如果我们没有配置MainClass属性,就会通过MainClassFinder类来查找MainClass
private static final String SPRING_BOOT_APPLICATION_CLASS_NAME = "";
protected String findMainMethod(JarFile source) throws IOException {
return (source, (),
SPRING_BOOT_APPLICATION_CLASS_NAME);
}
在所有类中查找包含SpringBootApplication注解且包含main方法的类,并当做启动类,内部通过ASM字节码库来解析class文件得到类信息。
启动流程
java -jar springbootfirst-0.0.
java启动jar包会找META-INF/文件中的Main-Class来启动,SpringBoot插件最终生成的Main-Class为 类。
/**
* jar包类型的启动器
*
* @author Phillip Webb
* @author Andy Wilkinson
* @since 1.0.0
*/
public class JarLauncher extends ExecutableArchiveLauncher {
static final String BOOT_INF_CLASSES = "BOOT-INF/classes/";
static final String BOOT_INF_LIB = "BOOT-INF/lib/";
public JarLauncher() {
}
protected JarLauncher(Archive archive) {
super(archive);
}
@Override
protected boolean isNestedArchive( entry) {
if (()) {
return ().equals(BOOT_INF_CLASSES);
}
return ().startsWith(BOOT_INF_LIB);
}
public static void main(String[] args) throws Exception {
new JarLauncher().launch(args);
}
}
最终运行的是文件中Start-Class,值为,其实就是我们项目中配置的启动类。
/**
* 启动器
*
* @author Phillip Webb
* @author Dave Syer
* @since 1.0.0
*/
public abstract class Launcher {
/**
* 启动流程
*/
protected void launch(String[] args) throws Exception {
();
//根据BOOT-INF/classes下的class文件和BOOT-INF/lib下的第三方jar包创建Archive
//创建的ClassLoader为LaunchedURLClassLoader类型
ClassLoader classLoader = createClassLoader(getClassPathArchives());
launch(args, getMainClass(), classLoader);
}
/**
* 创建新的LaunchedURLClassLoader,从多个URL中加载class
*/
protected ClassLoader createClassLoader(URL[] urls) throws Exception {
return new LaunchedURLClassLoader(urls, getClass().getClassLoader());
}
/**
* 将新的类加载器设置到线程上下文中,并启动应用程序
*/
protected void launch(String[] args, String mainClass, ClassLoader classLoader) throws Exception {
().setContextClassLoader(classLoader);
createMainMethodRunner(mainClass, args, classLoader).run();
}
/**
* 创建一个Main方法运行器来启动应用程序
*/
protected MainMethodRunner createMainMethodRunner(String mainClass, String[] args, ClassLoader classLoader) {
return new MainMethodRunner(mainClass, args);
}
}
创建新的ClassLoader类型LaunchedURLClassLoader,从BOOT-INF/classes下和BOOT-INF/lib下的所有jar包中加载class。加载我们整个项目的都是LaunchedURLClassLoader类加载器。
/**
* 一个执行Main方法的工具类
*
* @author Phillip Webb
* @author Andy Wilkinson
* @since 1.0.0
*/
public class MainMethodRunner {
private final String mainClassName;
private final String[] args;
/**
* Create a new {@link MainMethodRunner} instance.
* @param mainClass the main class
* @param args incoming arguments
*/
public MainMethodRunner(String mainClass, String[] args) {
= mainClass;
= (args != null) ? () : null;
}
public void run() throws Exception {
//使用线程上下文类加载器加载MainClass,就是我们项目中的SpringbootfirstApplication
Class<?> mainClass = ().getContextClassLoader().loadClass();
//执行Main方法
Method mainMethod = ("main", String[].class);
(null, new Object[] { });
}
}
参考
springboot 打包插件spring-boot-maven-plugin打包机制及内部结构分析
分类: spring
标签: spring, maven, java
好文要顶 关注我 收藏该文
strongmore
粉丝 - 9 关注 - 5
+加关注
00
« 上一篇: IDEA中对非Maven项目导出jar包
» 下一篇: java实现对图片打马赛克
posted @ 2021-11-04 18:50 strongmore 阅读(6395) 评论(0) 编辑 收藏 举报
刷新评论刷新页面返回顶部
登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页
【推荐】阿里云新人特惠,爆款云服务器2核4G低至0.46元/天
编辑推荐:
・ 一次 SQL 调优,聊一聊 SQLSERVER 数据页
・ 终于弄明白了 RocketMQ 的存储模型
・ 应届毕业生程序员在面试时如何做好自我介绍?
・ Redis 网络模型究竟有多强
・ 不规则图形背景排版高阶技巧 -- 酷炫的六边形网格背景图
阅读排行:
・ 来自一位十年.net研发老人的吐血整理:.Net技术栈-网址导航
・ 做算法的这一年――2022年个人年终总结
・ .Net 7 团队把国内的龙芯确实当做一等公民和弃用的项目
・ 我希望来年,更多是靠关系和模式挣钱――2022年我的总结与思考
・ 平淡详和的一年――2022年个人总结与思考
昵称: strongmore
园龄: 3年7个月
粉丝: 9
关注: 5
+加关注
< 2023年1月 >
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11
搜索
找找看
谷歌搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
最新随笔
1.单元测试框架之Junit使用及原理分析
2.Kotlin学习之反射
3.Kotlin学习之Kotlin和Java之间相互调用
4.Kotlin学习之函数
5.Kotlin学习之委托
6.Kotlin学习之面向对象
7.Kotlin学习之基本语法
8.SpringMVC整合Swagger简单使用及原理分析
9.SpringMVC源码分析之一个请求的处理
整合Mqtt原理分析
我的标签
java(220)
算法(40)
数据结构(39)
spring(30)
设计模式(28)
python(11)
多线程(8)
踩坑(8)
linux(8)
kotlin(8)
更多
积分与排名
积分 - 174759
排名 - 6340
随笔分类
c语言(2)
html(2)
java(136)
js(4)
kotlin(7)
leetcode(11)
linux(8)
python学习之旅(8)
spring(28)
机器学习(1)
数据结构与算法(34)
网络(2)
随笔档案
2022年6月(6)
2022年5月(28)
2022年4月(12)
2022年3月(5)
2022年2月(1)
2021年11月(3)
2021年10月(6)
2021年9月(13)
2021年8月(21)
2021年7月(13)
2021年6月(9)
2021年5月(6)
2021年4月(11)
2021年3月(21)
2021年2月(5)
更多
阅读排行榜
1. java中文转拼音(12794)
2. java操作yaml文件(9029)
3. java实现图片压缩(7791)
4. jdk8升级jdk11踩坑记录(lombok版本不兼容)(7465)
5. IDEA版本和Maven版本不兼容的问题(6840)
评论排行榜
1. Lombok原理分析及简单实现(4)
2. java中BloomFilter(布隆过滤器)简单使用(3)
3. java中如何通过程序检测线程死锁(1)
4. Spring中表达式语言spring-expression简单使用(1)
5. 关于100个人随机给钱的模拟实验(1)
推荐排行榜
1. MurmurHash算法简单介绍(2)
2. java操作yaml文件(2)
3. java进行PDF和图片之间的相互转换(2)
4. JMX简单入门(2)
5. 浏览器的DNS解析过程分析(1)
最新评论
1. Re:Spring中表达式语言spring-expression简单使用
支持
--我叫城北徐公
2. Re:java中BloomFilter(布隆过滤器)简单使用
@strongmore 好的好的,感谢回复~~...
--言小蹊
3. Re:java中BloomFilter(布隆过滤器)简单使用
@言小蹊 在IDEA上...
--strongmore
4. Re:java中BloomFilter(布隆过滤器)简单使用
您好,请问您这是是如何查看内存使用情况的?您是在eclipse上运行的代码吗?
--言小蹊
5. Re:java实现一个短URL生成器
博主介绍的短链接生成核心代码的确挺实用的,短链接就是将长的网页址通过技术方法进行缩短为短串。其实短链接只有生成和跳转还不能满足实际业务需求,还需要考虑其使用场景,目前短链接使用场景主要是短信内带短链接...
--缩链
Copyright © 2023 strongmore
Powered by .NET 7.0 on Kubernetes
1. 前言
2. 打包原理
3. 插件是如何找到启动类的
4. 启动流程
5. 参考
springboot zip文件上传无法解压

解决方法如下:
1、使用xshell登录服务器。
2、安装lrzsz软件。
3、使用rz-y命令然后进行文件上传。
4、使用sz命令下载,命令格式如下,之后就可以重新试一下文件上传后能不能解压。
-
果盘绘画图片大全简单创作方法快速制作技巧2024-01-02 16:57:54
-
小年插画图片创作方法快速制作技巧2024-01-02 16:57:20
-
小年绘画作品制作技巧2024-01-02 16:55:45
-
小年插画图片创作方法快速制作技巧2024-01-02 16:55:02
-
立春插画图片如何制作2024-01-02 16:54:19
-
立春插画图片创作方法快速制作技巧2024-01-02 16:53:32






扫描二维码添加客服微信
扫描二维码关注