首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JAR、Fat JAR、Executable JAR的区别

JAR、Fat JAR、Executable JAR的区别

基础概念

  1. JAR (Java Archive):
    • JAR文件是Java平台上的归档文件格式,用于将多个Java类文件、相关的元数据和资源(如文本、图像等)打包成一个文件。
    • JAR文件通常用于分发Java应用程序或库。
  • Fat JAR:
    • Fat JAR(也称为uber-jar)是一种包含所有依赖项的JAR文件。这意味着除了你的应用程序代码外,Fat JAR还包含了所有外部库和资源。
    • 这种JAR文件是自包含的,可以在没有其他依赖项的情况下运行。
  • Executable JAR:
    • Executable JAR是一种特殊的JAR文件,它包含了一个可执行的Java主类,并且可以通过Java虚拟机(JVM)直接运行。
    • 这种JAR文件通常包含一个MANIFEST.MF文件,其中指定了主类和其他必要的配置。

相关优势

  1. JAR:
    • 标准化的归档格式,便于分发和管理Java类文件和资源。
    • 可以作为库文件被其他Java应用程序引用。
  • Fat JAR:
    • 自包含性:不需要额外的依赖项,便于部署和分发。
    • 简化环境配置:减少了在不同环境中配置依赖项的复杂性。
  • Executable JAR:
    • 直接运行:可以通过JVM直接运行,无需额外的启动脚本或命令。
    • 简化部署:只需一个文件即可完成部署,减少了部署的复杂性。

类型

  1. JAR:
    • 标准JAR文件,包含Java类文件和资源。
  • Fat JAR:
    • 包含所有依赖项的JAR文件。
  • Executable JAR:
    • 包含可执行主类的JAR文件。

应用场景

  1. JAR:
    • 分发Java库或应用程序的组件。
    • 在其他项目中引用作为依赖项。
  • Fat JAR:
    • 小型项目或独立应用程序的部署。
    • 需要简化依赖管理的场景。
  • Executable JAR:
    • 创建独立的、可直接运行的Java应用程序。
    • 需要简化部署和运行流程的场景。

常见问题及解决方法

  1. Fat JAR构建问题:
    • 问题: 构建Fat JAR时,某些依赖项未包含在内。
    • 原因: 可能是由于构建工具配置不正确或依赖项未正确声明。
    • 解决方法: 使用Maven或Gradle等构建工具时,确保所有依赖项都已正确声明,并使用相应的插件生成Fat JAR。例如,在Maven中可以使用maven-shade-plugin插件。
    • 解决方法: 使用Maven或Gradle等构建工具时,确保所有依赖项都已正确声明,并使用相应的插件生成Fat JAR。例如,在Maven中可以使用maven-shade-plugin插件。
  • Executable JAR运行问题:
    • 问题: 运行Executable JAR时,出现NoClassDefFoundError错误。
    • 原因: 可能是由于JAR文件中缺少某些依赖项或主类配置不正确。
    • 解决方法: 确保MANIFEST.MF文件中正确指定了主类,并且所有依赖项都已包含在Fat JAR中。
    • 解决方法: 确保MANIFEST.MF文件中正确指定了主类,并且所有依赖项都已包含在Fat JAR中。

通过以上解释和示例代码,你应该能够理解JAR、Fat JAR和Executable JAR的区别及其应用场景,并解决常见的构建和运行问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Fat jar打包工具

Fat Jar Eclipse Plug-In是一个可以将Eclipse Java Project的所有资源打包进一个可执行jar文件的小工具,可以方便的完成各种打包任务,我们经常会来打jar包...,但是eclipse自带的打jar似乎不太够用,Fat Jar是eclipse的一个插件,特别是Fat Jar可以打成可执行Jar包,并且在图片等其他资源、引用外包方面使用起来更方便。...使用问题:刚使用Fat Jar打包了一个SWT的程序,头两次打包成功后运行打包的jar文件,但是提示找不到主类,但是在打包是主类我已经配置过的,看打好的包中META-INF\MANIFEST.MF前两行的确没有关于主类的定义...,手动加上主类的配置之后jar包就可以双击启动了,很费解,就去Fat Jar的项目主页(http://fjep.sourceforge.net)去看了下,在Fat Jar Eclipse Plug-In...选项,应该使用默认的,这样就没问题了 方法2 右键项目 ——》 Build Fat Jar,如下图: ?

1.7K30
  • java -jar与nohup java -jar的区别

    作为Java程序员,经常会面临一个选择,打完jar包,测试或者上线生产的时候,java –jar or nohup java -jar?...---- java -jar a.jar & 直接启动jar文件,在当前会话进程中开启一个子进程来运行程序,这个子进程会随着会话进程的结束而结束。 这种情况适合短时间测试用。...---- nohup java -jar a.jar& hangup (挂断),终端退出时会发送 hangup 信号来通知其关闭所有子进程。...nohup(不挂断,忽略挂断信号) nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。...我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?

    1.9K30

    使用spring boot创建fat jar APP

    介绍 在很久很很久以前,我们部署web程序的方式是怎么样的呢?配置好服务器,将自己写的应用程序打包成war包,扔进服务器中指定的目录里面。当然免不了要配置一些负责的xml和自定义一些servlet。...现在有了spring boot,一切都变了,我们可以将web应用程序打包成fat jar包,直接运行就行了。 本文将会关注于怎么使用Spring Boot创建一个fat jar包。... build和run 有了上面的配置,只需要使用 mvn clean install 就可以生成相应的jar...如果你要在服务器上面永久运行该服务,即使登录的用户退出服务器,则可以使用nohup命令: nohup java -jar fat jar和 fat war 在上面的例子中...,所有的依赖jar包都会被打包进入这一个fat jar中,如果你使用了tomcat,那么tomcat也会被打包进去。

    96010

    Jar 命令打包 jar包

    -help”,就k可看到jar的详细用法了。...jar中:jar -cvfm   XX.jar  Manifest.mf dir/* manifest 文件的格式很简单,每一行都是  " 名-值 "  对应的: 属性名开头,接着是...:(明显简单多了,也不会造成无谓的拼写错误) java -jar myapplication.jar 管理JAR的依赖资源 很少Java应用会仅仅只有一个jar文 件,一般还需要 其他类库。...: java -classpath mail.jar:activation.jar -jar myapplication.jar 在不同的操作系统中,jar包间的分隔符也不一样,在UNIX用“:”,在...,用空格分隔两个jar包) 这样我们仍然可以使用和上例中相同的命令来执行该程序: java -jar myapplication.jar Class-Path属性中包含了用空格分隔的jar文件,在这些jar

    5.6K30

    如何替换jar中的jar配置

    # 问题 通过一般方式,用好压等压缩软件直接打开jar包,如果直接替换.class、.html、.yml格式的文件,可正常替换成功并生效。...但是替换jar包中引用的jar包,用这样的方式是不可以的,在替换完成后启动项目,会报以下错误: Caused by: java.lang.IllegalStateException: Unable to...Please check the mechanism used to create your executable jar file # 解决 可通过jar命令先将jar包解压,在解压目录中将引用jar...包替换后,再重新压缩,命令如下(注意替换**为自己实际jar包名称) 解压: jar -xvf ./**.jar 替换引用jar,替换完成后重新压缩打包: jar -cfM0 **.jar ./...最后启动jar即可 nohup java -jar summer-0.0.1.jar --server.port=8080 >summer.log 2>&1 &

    2.6K20

    maven:shade 生成快照版本(SNAPSHOT)的fat-jar,同时生成对应的source.jar

    有的时候,我们需要将项目所有依赖库打成一个fat-jar,提供给客户,同时提供对应的source.jar。...包到本地仓库时并不会生成项目对应的source.jar.只有mvn deploy发布到远程仓库时才会安装source.jar,如果我没有远程仓库,或不想发布到远程仓库,或者我只是在开发期频繁生成快照版本...(SNAPSHOT),上述的maven-shade-plugin插件就生成的source.jar并不包含项目的源码,因为它找不到项目对应的源码。...经过反复摸索,找到为快照版本安装source.jar到本地仓库的办法,也很简单: 正常我们只是执行mvn install,安装快照版本到本地仓库,现在只要多一条source:jar让maven在执行install...命令的同时生成source.jar并安装到本地仓库,如下: mvn source:jar install

    96910

    用docker部署jar包_war包和jar包部署区别

    对于springboot项目运行,直接是 java -jar 的方式运行,如果想要放到docker中运行,有三种方式: 方式一: 1. 上传jar到服务器的指定目录 2....# demo-0.0.1-SNAPSHOT.jar 就是你上传的jar包,替换为jar包的名称 # demo.jar 是你将该jar包重新命名为什么名称,在容器中运行 # expose 该容器暴露的端口是多少...,然后运行之后,就可以将需要运行的jar放在宿主机的挂载目录下,然后每次重新运行docker容器即可。...# -Duser.timezone 是设置时区 # jdk8 /usr/bin/java -jar 是执行 java jar的命令 # /jar/demo-1.0.jar 是需要运行的...jar包的位置在容器中的什么位置,/jar 下面 上面就是两种部署jar包的方式,并且还可以更方便的部署~~,就是使用maven插件,一键直接部署,后续可以继续再写~~ 版权声明:本文内容由互联网用户自发贡献

    2.2K60

    jar包与war包的区别

    大家好,又见面了,我是你们的朋友全栈君。 jar包:对于学习java的人来说应该并不陌生。我们也经常使用也一些jar包。其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已。...当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。...这是jar的里面的class文件 war包:其实就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配置文件,前端的页面文件,以及依赖的jar。...那么究竟jar和war有什么区别呢? 回顾一下我们在做项目时,一般将项目分为两层:服务层和表现层(视图层),通常我们把服务层打包成jar,而把视图层的包打成war包。...以上都是从实际中出发看出的最明显的区别,如果从内部看,我们可以看到:war包中的目录结构中包括WEB-INF,而war是一个可以直接运行的web模块,做好一个web项目后,需要打包部署到容器中,一般放置在

    1.3K10

    java打包jar和war的区别

    大家好,又见面了,我是你们的朋友全栈君。...jar和war包,都是为了项目的部署和发布,把项目打包,同茶馆在部署打包的时候,在里面加上部署的信息(把代码和依赖压缩在成一个编译器可以直接使用的压缩文件,eg:tomcat先解压,编译,缺点是随着文件的增加...,启动变慢) 相同点: 都是压缩文件,用解压文件可以解压 不同点: war是javaweb打的包,jar是java打的包 jar只用于java来写的项目打包,里面只有编译后的class文件和部署文件,下个档于把类和一些相关资源封装到一个包中...,便于程序中引用;war包括代码编译后的class文件,依赖的包,配置文件,所有 网站页面,(html,jsp==),可以理解为一个web项目里面 所有东西。

    1K10

    java jar包与war包_jar包和war包的区别,java jar包和war包部署的区别介绍「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 很多人都在想jar和war部署究竟哪个好呢?jar包和war包这两者之间的区别又是怎样的?有着什么不同?带着这些问题下面就一起来了解一下吧。...1、jar包和war包概念介绍 最首先的话,我们还是要来对jar包以及war包的概念进行一个简单的了解,首先是jar包。 什么是jar包?...jar包是类的归档文件,jar文件格式以流行的ZIP文件格式作为基础,和ZIP文件不一样的是,JAR文件不仅仅用来进行压缩和发布,还用来部署和封装库、组件以及插件程序,并且,还能够被像编译器以及JVM这样的工具直接使用...2、目录结构 jar包当中的com里面放的是class文件,配置文件,可是没有静态资源的文件,大部分的JAR里面,含有一个META-INF目录,它是用来存储包和扩展的配置数据的,例如,安全性和版本信息。...3、jar包和war包的不同之处 (1)war包和项目的文件结构保持一致,而jar包却不一样; (2)jar包里面没有静态资源的文件; 4、jar包和war包部署项目的区别 部署普通的spring项目用

    2.6K10

    jar包和war包的区别

    大家好,又见面了,我是你们的朋友全栈君。 1. 概念 1.1 jar包 JAR包是类的归档文件,JAR 文件格式以流行的 ZIP 文件格式为基础。...目录结构 ①jar包里的com里放的就是class文件,配置文件,但是没有静态资源的文件,大多数 JAR 文件包含一个 META-INF 目录,它用于存储包和扩展的配置数据,如安全性和版本信息。...②而war包里的WEB-INF里放的class文件和配置文件,META-INF和jar包作用一样,war包里还包含静态资源的文件 3....总结起来就是有两点不同: ①war包和项目的文件结构保持一致,jar包则不一样。 ②jar包里没有静态资源的文件(index.jsp) 4....部署项目的区别 部署普通的spring项目用war包就可以,部署springboot项目用jar包就可以,因为springboot内置tomcat。

    72530

    war包和jar包的区别

    大家好,又见面了,我是你们的朋友全栈君。 jar包:对于学习java的人来说应该并不陌生。我们也经常使用也一些jar包。其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已。...当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。...这是jar的里面的class文件 war包:其实就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配置文件,前端的页面文件,以及依赖的jar。...文件数量对于jar包,这样便于我们部署工程,直接放到tomcat的webapps目录下,直接启动tomcat即可。...war包的目录结构

    72110

    jar 包与 war 包区别

    打包方式区别 SpringBoot 适宜打成 war 包的场景 ---- 1. jar 包 JAR(Java Archive),是与平台无关的文件格式。...jar 包是通过 JavaSE 程序打成的包。 jar 与 zip 异同 jar 文件格式以流行的 zip 文件格式为基础。...同:jar、zip 用于压缩和发布 异:jar 还用于 部署 封装库、组件、插件程序 可被编译器、jvm 等工具直接使用 另外 jar 包还含有特殊的文件,如 manifest 和部署描述符,用来只是工具如何处理特定的...将 jar 包引入到自己的项目中,就可以直接使用这些 jar 包中的类和属性(从前这些 jar 包都会被扔到 lib/ 目录下)。 2. war 包 war 包就是 web 项目压缩包。...应用 部署、封装库、组件和插件程序 部署/发布 部署项目区别 SpringBoot项目(因为SpringBoot 内置了 tomcat) Spring项目 SpringBoot 打包方式区别 其实

    1.6K10
    领券