我在所有常见帖子中浏览了网站,但我的问题略有不同:
将包含许多其他jar文件作为依赖项的简单Java应用程序打包的最佳实践是什么?
例如:我有一个带有main的foo.java,以及从foo.java访问的foo1.java,foo2.java。我在我的eclipse构建路径上使用log4j.jar,mysql.jar。
现在我正在使用ant,它可以很好地构建它。我所做的是编写一个引用所有classpath和log4j信息的简单.sh脚本。但这意味着我必须给他们所有这些罐子,他们必须在正确的位置。我想能够说“java -jar foo.jar”并让它在任何机器上运行而无需传输任何其他文件。
也许.jar不是最好的方式。我只是希望能够将一个文件提供给不知道如何设置类路径和所有内容的人,并让它能够运行。
我也很好奇最佳做法是什么。你通常只是给某人一个罐子并给他们一个拉链的所有依赖罐并告诉他们把它放在类路径上吗?
你以某种方式制作.rpm吗?
我对MAVEN不熟悉,但如果这是最好的方法,我会做一个教程。现在我用蚂蚁。
答案 0 :(得分:2)
您可以使用
等工具将多个jar文件合并到一个jar文件中然后,您可以使用简单的jar -jar yourApplication.jar
启动应用程序。
来自OneJar的网页:
什么是One-JAR?
One-JAR允许您将Java应用程序及其依赖项Jars打包到一个可执行的Jar文件中。
JarJar和OneJar都有Ant任务,可以与他们的发行版中包含的Ant集成。
另一种选择是使用WebStart。这样,所有依赖项都会自动下载,并且推出新版本是轻而易举的。首先需要在初始运行时访问Web。
答案 1 :(得分:2)
我个人不喜欢将所有依赖项转储到像这样的单个jar文件中。这使得查看二进制发行版的人很难弄清楚程序真正依赖的内容。
我更喜欢用jar创建一个lib目录及其所有依赖项。在manifest.mf中指定带有Class-Path:
的类路径。在清单中指定带有Main-Class:
的主类。然后使用java -jar my.jar
运行该应用程序。您只需要将您的类及其所有依赖项打包为zip或tar。
Maven确实有自动化清单创建的任务,还有一个自动化存档创建的任务。但是,对于一个单个工件和第三方库很少改变的简单项目,它很容易在ant脚本中构建。
答案 2 :(得分:0)
您可以使用JarJar之类的工具自动将所有依赖项捆绑到一个JAR文件中,这样您的用户只需要一个文件就可以java -jar foo.jar
(或双击它)。
答案 3 :(得分:0)
尝试 Spring Boot 。
它会将所有JAR打包成单个胖可执行JAR,可以使用java -jar myjar.jar
简单地执行。此外,它还为您提供了许多其他很酷的功能。
查看Spring文档:https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started-first-application.html#getting-started-first-application-executable-jar