我一直致力于Java
项目并使用Maven
进行管理。
项目本身有许多第三方依赖,例如Box2d
,OpenGL
..
当我运行mvn package
时,项目的自定义源代码被打包到.jar
中,并且它的所有依赖项都放在名为{{1}的.jar
旁边的文件夹中}}。
还会创建一个lib
文件夹,其中包含bin
和Windows
平台的启动脚本。 (汇编描述符如下)。
我想知道这是打包这个基于*nix
的应用程序的最佳方法吗?它是否适合公共消费?
或者单个Java
会更好吗?其中包含1个文件中的所有依赖项。
uber.jar
答案 0 :(得分:1)
有三种常见的方法:
创建一个包含所有依赖类和资源的超级jar。
创建一个可执行jar并使用Class-Path
manifest属性指定从属jar的位置。
创建一个包装器脚本,您可以通过CLASSPATH
环境变量或-cp
参数指定相关jar的位置。
(还有其他更复杂的方法......但我不会在这里讨论它们。)
每种方法都有优点和缺点。
使用超级jar,用户(部署者,管理员)很难使用备用版本的依赖项。 (这可以是依赖项的许可证要求 !!)
使用Class-Path
清单属性,存在一定程度的脆弱性。如果主jar或从属jar未安装在预期位置,则应用程序将无法运行。修复损坏/不合适的清单是非常繁琐的。
使用包装器脚本方法(也可能是清单方法),您可能需要针对不同平台使用不同的脚本(或属性)。
但正如您所看到的,没有通用的“最佳方法”。 (如果有人告诉你,他们正在做出毫无根据的假设!)