Java包装/构建通用技术Jar文件专门

我查看了所有常见post的网站,但我的问题略有不同:

打包一个包含许多其他jar文件作为依赖项的简单Java应用程序的最佳实践是什么?

例如:我有一个带有main的foo.java,以及从foo.java访问的foo1.java,foo2.java。 我在我的eclipse构建路径上使用log4j.jar,mysql.jar。

现在我正在使用ant,它可以很好地构建它。 我所做的是编写一个引用所有classpath和log4j信息的简单.sh脚本。 但这意味着我必须给他们所有这些jar子,他们必须在正确的位置。 我想能够说“java -jar foo.jar”并让它在任何机器上运行而无需传输任何其他文件。

也许.jar不是最好的方式。 我只是希望能够将一个文件提供给不知道如何设置类路径和所有内容的人,并让它能够运行。

我也很好奇最佳做法是什么。 你通常只是给某人一个jar子并给他们一个所有依赖jar的拉链并告诉他们把它放在类路径上吗?

你以某种方式制作.rpm吗?

我不熟悉MAVEN,但如果这是最好的方法,我会做一个教程。 现在我用ant。

就个人而言,我不喜欢将所有依赖项转储到这样的单个jar文件中。 这使得查看二进制分发的人很难弄清楚程序真正依赖的内容。

我更喜欢做的是用我的jar及其所有依赖项创建一个lib目录。 在manifest.mf中使用Class-Path:指定Class-Path: 。 使用Main-Class:指定主类Main-Class:在清单中。 然后使用java -jar my.jar来运行应用程序。 您只需要将您的类及其所有依赖项打包为zip或tar。

Maven确实有自动化清单创建的任务,还有一个自动化存档创建的任务。 但是,对于一个单个工件和第三方库很少改变的简单项目,它很容易在ant脚本中构建。

您可以使用诸如的工具将多个jar文件合并到一个jar文件中

  • FatJar
  • OneJar
  • JarJar

然后,您可以使用简单的jar -jar yourApplication.jar启动应用程序。

来自OneJar的网页:

什么是One-JAR?

One-JAR允许您将Java应用程序及其依赖项Jars打包到一个可执行的Jar文件中。

JarJar和OneJar都有Ant任务,用于与其分发中包含的Ant集成。


另一种选择是使用WebStart。 这样,所有依赖项都会自动下载,推出新版本变得轻而易举。 但是在初始运行时需要Web访问。

您可以使用JarJar之类的工具自动将所有依赖项捆绑到一个JAR文件中,这样您的用户只需要一个文件就可以执行java -jar foo.jar (或双击它)。

试试Spring Boot 。 它会将所有JAR打包成单个胖可执行JAR,可以使用java -jar myjar.jar简单地执行。此外,它还为您提供了许多其他很酷的function。 检查Spring文档: https : //docs.spring.io/spring-boot/docs/current/reference/html/getting-started-first-application.html#getting-started-first-application-executable-jar