首页 / 知识
关于java:将发布合并到一个JAR文件中的最简单方法
2023-04-16 11:17:00

Easiest way to merge a release into one JAR file是否有工具或脚本可以轻松地将一堆JAR文件合并为一个JAR文件?一个好处是可以轻松地设置主文件清单并使之可执行。 具体情况是Java重组文本工具。我想用类似的东西来运行它:
据我所知,它没有依赖关系,这表明它不应该是一个简单的单文件工具,但是下载的ZIP文件包含很多库。
如您所见,不需要手动执行此操作有些可取。 到目前为止,我只尝试了AutoJar和ProGuard,它们都很容易上手。看来JAR文件中的常量池存在一些问题。
显然,jrst有点破损,因此我将对其进行修复。 Maven 更新:我从来没有修正过这个应用程序,但是我签出了基于胖JAR的Eclipse的" Runnable JAR导出向导"。我发现这很容易用于部署自己的代码。 其他一些出色的建议对于在非Eclipse环境中进行构建可能会更好,oss可能应该使用Ant进行良好的构建。 (到目前为止,Maven只是给我带来了痛苦,但其他人还是喜欢它。)
蚂蚁的
Eclipse 3.4 JDT的Runnable JAR导出向导。 在Eclipse 3.5中,已对此进行了扩展。现在,您可以选择要如何处理引用的JAR文件。 尝试了几种不同的解决方案后,我发现One-JAR是最容易使用的,并且设法做到了这一点:生成一个包含我需要的一切的可执行JAR。 One-JAR使用自定义的类加载器,该类加载器可以导航嵌套的资源。看一下下载中的.bat文件,它看起来像jrst-0.8.1.jar中的org.codelutin.jrst.JRST是主类,因此清单应如下所示:
真正很酷的是,One-JAR将为您处理传递命令行参数。假定您需要的所有资源都捆绑在单个JAR中,则类路径由自定义类加载器处理。 使用One-JAR的最简单方法是使用ant。有一个自定义的"单罐"蚂蚁任务,其工作方式如下(假设您的清单被称为" rst.mf"):
如果您是Maven用户,则通常程序集插件会执行您想要的操作,或者可能是阴影插件,并且在某些情况下会组合使用。 使用Assembly插件,您可以将清单文件带有任何必要的设置放入项目中,尽管默认值通常很好。然后完成构建
或者,如果您还有其他需要处理的特殊事项,则可以选择其他目标之一。所有要包含的JAR文件都由Maven的依赖解析器获取。如果您使用shade插件,它通常是安装目标的一部分,在一个特定的项目中,我现在要做的是
您可以使用JarJar,它将使用包阴影来确保您的JAR文件不会与其他文件冲突。 ProGuard不仅将您的JAR文件打包到一个文件中,而且还可以优化,清理或混淆您的类文件,使生成的JAR文件比以前的所有JAR文件的总和小得多。
我实际上是使用JRST工具尝试过ProGuard的,正如您所报告的那样。我试图找出问题所在,并发现它与jrst引用的ICU4J库中的错误有关。问题是,使用的ICU版本现在已经过时了。因此,我用ICU4J 3.2版替换了 我的猜测是ProGuard可以按预期工作,但jrst的库只是不一致的。除了与开发人员交谈之外,我不知道您能做更多的事情,因为他们应该检查并更新项目的依赖关系。 (基于Andrian的):
One-JAR 0.97刚刚在http://one-jar.sourceforge.net上发布,并且已经扩展了对Spring和Guice等框架的支持,这可能给其他方法带来麻烦。它还处理classloader-inversion-One-JAR外部的某些JAR文件(例如,可能未捆绑提供的JDBC驱动程序)。 One-JAR是命令行,带有Ant和Maven 2插件。仅使用" jar"工具进行构建也很简单。 我还可以推荐Ference Hechler在上面写的Eclipse Jar Exporter(Runnable):他在提出一种简单的包装一组JAR文件的方法方面做得很好。他和我从事One-JAR的开发,但Jar导出器基于不同的代码库。 或使用Maven程序集插件(MVN assembly:assembly) 有一个名为autojar的工具,它将扫描您的字节码并使用找到的类(包括引用的(导入的)类)编译.jar文件。 但是,并非总是与Spring之类的东西一起使用,在Spring中,您可以在配置中指定类名,然后由框架加载它。 我认为您需要的工具是JarSplice:http://ninjacave.com/jarsplice 它不需要Ant或Maven,具有自己的GUI,使用起来很简单,并且可以完全按照您的要求进行->它将几个jar文件的内容合并到一个文件中(请注意,它仍然需要添加自己的类加载器 )。 您应该使用Maven阴影插件来做到这一点。 我经常使用maven来构建独立的jar文件,它是如此强大 查看更多: http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html 听起来您正在寻找Apache Ant。 |
最新内容
相关内容
linux命令补全工具?
linux命令补全工具?,工具,系统,软件,地址,命令,名称,智能,环境,信息,终端,简述Linux中的命令行自动补齐功能1、首先打开LINUX的操作系统,在左边更新文件命令linux?
更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux基础命令增加文件?
linux基础命令增加文件?,系统,时间,名字,文件,基础,数据,命令,名称,首次,密码,linux命令如何新建一个文件终端下键入:touch加文件名,这样就创建linux文件全选命令?
linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,linux不小心文件全选点了打开,怎么全部取消打开文件你如果没有修linux重名名文件命令?
linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件名,linux文件重命名命令mv较简单的处理命令:mvmv原文件名新文件名如linux将文件备份命令?
linux将文件备份命令?,系统,密码,设备,软件,通讯,较大,认证,服务,数据,文件,Linux下数据备份命令scp、rsync和后台运行1、scp 是secure copy的linux扩展文件命令?
linux扩展文件命令?,工作,地址,系统,信息,命令,目录,管理,情况,文件,标准,Linux文件系统操作命令1、(1)根据文件名查找例如,我们想要查找一个文linux设置日志命令行?
linux设置日志命令行?,异常,系统,实时,日志,管理,信息,对比,项目,名称,情况,Linux运维知识:从命令行如何查看Linux日志如下图所示,先cd到我们需linux文件替换命令行?
linux文件替换命令行?,资料,命令,文件,数据,名称,系统,实时,工作,字符串,批量,Linux命令之sed-替换字符串Linux sed 命令是利用脚本来处理文本linux命令行解锁文件?
linux命令行解锁文件?,系统,地址,工具,工作,管理,电脑,命令,文件,信息,密码,Linux命令行执行root权限的命令目录方法1:从终端获取root权限打开读写文件命令linux?
读写文件命令linux?,系统,数字,电脑,档案,地址,命令,文件,标准,位置,设备,linux改文件权限为可读写(Linux改文件权限)1、在Linux中,可以使用chmlinux命令行设置网卡?
linux命令行设置网卡?,系统,地址,信息,网络,工具,电脑,工作,名称,设备,网卡,linux配置网卡后,单独关掉网卡和重启网卡的命令是什么?首先用CRT