Java 打包/构建 Jar 文件具体常用技术

2023-12-04

我浏览了该网站的所有常见帖子,但我的问题略有不同:

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

例如:我有 foo.java,其中包含 main,以及从 foo.java 访问的 foo1.java、foo2.java。我在 Eclipse 构建路径上使用 log4j.jar、mysql.jar。

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

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

我也很好奇最佳实践是什么。您通常只是给某人一个 jar 并给他们所有依赖项 jar 的 zip 并告诉他们将其放在类路径上吗?

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

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


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

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

Maven 确实有一项任务是自动创建清单,还有一项任务是自动创建归档文件。但是,对于具有单个工件和很少更改的第 3 方库的简单项目,很容易在 Ant 脚本中构建。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 打包/构建 Jar 文件具体常用技术 的相关文章

随机推荐

  • 如何在ReactJS中实现带有受控组件的动态表单?

    当我查看参考文献中的示例时controlled form components 在react js官网 我想知道应该如何实施form您将能够remove and add input元素以动态方式使其成为受控组件 这可能吗 在例子中我们可以看
  • Node.js Sass 版本 7.0.0 与 ^4.0.0 || 不兼容^5.0.0 || ^6.0.0

    我使用 Node js v16 13 1 并创建了一个 React 应用程序 我尝试使用Sass 但是当我尝试运行它时 出现以下错误 Node Sass 版本 7 0 0 与 4 0 0 不兼容 5 0 0 6 0 0 如果你想使用SCSS
  • 使用 ffmpeg 将图像编码为视频

    我正在尝试将一系列图像编码为一个视频文件 我正在使用 api example c 中的代码 它可以工作 但它在视频中给了我奇怪的绿色 我知道 我需要将 RGB 图像转换为 YUV 我找到了一些解决方案 但它不起作用 颜色不是绿色而是很奇怪
  • Oracle Apex 5 - 页脚栏,类似于 App Builder 中的页脚栏

    如何在 Oracle Apex 通用主题应用程序中创建页脚栏 区域 就像在 Oracle Apex App Builder 中一样 实现该目标所需的 html css 代码是什么 具体来说 我有兴趣更改或替换 UT 中已存在的内容 以替换与
  • sed 用条件替换字符串

    我有一个文件包含几行 每一行的格式如下 2011 07 10 condition hhh aaa value bbb 2011 07 10 condition ccc aaa value bbb 我想使用 sed 查找 aaa 和 bbb
  • 如何正确迁移存储过程?

    我的任务是将站点从旧的客户端服务器转移到新的服务器 我已经从旧服务器完成了 sqldump 并导入到新服务器中 除了使用 mysqli 在 php 中完成的一些 sql 调用之外 它正在工作 我对存储过程不太熟悉 但我注意到失败的是如下所示
  • 如何在 gnuplot 中删除“跳跃”值之间的线?

    我想用包含 跳跃 值的图画一条线 举个例子 当我们绘制几个周期的 sin x 图形并绘制它时 会出现从右到左穿过的不切实际的线 如下图所示 避免这种情况的一个想法可能是使用with linespoints link 但我想在不修改原始数据文
  • 将事件插入带有 Intent 的日历时出错

    我正在尝试将事件插入calendar来自片段 但我不断收到错误 指出没有找到处理 Intent 的活动 这是错误 android content ActivityNotFoundException 找不到处理 Intent 的 Activi
  • 从目录中选择随机文件[重复]

    这个问题在这里已经有答案了 关于如何改进这种方法有什么建议吗 我目前正在使用它从壁纸目录中选择单个壁纸 我知道你不应该再使用 arraylist 但我想不出替代方案 我也不确定如何在目录信息中过滤不止一种类型的文件 即 jpg gif pn
  • 如何在for循环中正确调用递归函数?

    我正在尝试实现一个以目标为参数的方法string and an array with string其中的价值观 目标是检查是否可以使用数组的值构造给定的目标字符串 数组中的单词可以根据需要多次使用 例子 console log canCon
  • 将 Ctrl+Key 发送到第三方应用程序

    Im using a 3rd Party Application that exports a file The application uses a hot key Ctrl E as a shortcut for this functi
  • Sonar 插件不适用于使用 ANT 作为构建脚本的项目

    Problem 我刚刚安装了 Sonar Jenkins 插件 我进入我的配置作业 自由式作业 通过 ANT 构建生成 WAR 文件工件 并执行以下操作 选中声纳复选框 这里没有问题 配置声纳的安装目录 这里没有问题 选中了以下复选框 检查
  • 分页显示最大值并限制其余值

    现在我的分页会显示这样的内容 1 2 3 4 5 6 7 8 9 我怎样才能让它像这样显示 1 2 3 4 5 9
  • 如何在 OS X 中使用“SecItemAdd”存储对称密钥?

    我想在 OS X 的钥匙串中存储对称密钥 我通过 Apple DevDocs 阅读了我应该使用的内容SecItemAdd为此 我还阅读了 CryptoExercise 但没有给我任何解决方案 但是当我这样做时 我总是得到 OSStatuse
  • 从数组创建对象树

    我想从数组中创建一个对象树 这里向我提供了一个很好的解决方案 我发现了 reduce 方法 Javascript 使用 object create 从字符串构建一棵树实际上 我的需求有点不同 而且我无法适应提供的代码 所以我回到这里寻求帮助
  • 32位pyodbc读取64位访问(accdb)

    我在 Windows 8 1 64 位机器上运行 python 2 7 32 位 我有 Access 2013 和一个 accdb 文件 我试图从 python 和 pyodbc 访问该文件 我可以在 64 位 ODBC 管理器中创建 64
  • gnuplot 无法通过 ssh 命令工作

    所以我有一个 csv 还有一个 plt 文件 我跑gnuplot plt file plt一个png就诞生了 但如果我跑ssh sameuser samemachine gnuplot plt file plt 我收到 pngcario 错
  • ASP.NET Web API获取子列表(分层资源)

    我想使用 ASP NET Web Api 实现以下剩余架构 http mydomain api students http mydomain api students s123 http mydomain api students s123
  • 页面加载时显示 Firefox WebExtension 页面操作

    我一直在尝试通过阅读以下文档来了解如何使用 WebExtension 页面操作 https developer mozilla org en US Add ons WebExtensions manifest json page actio
  • Java 打包/构建 Jar 文件具体常用技术

    我浏览了该网站的所有常见帖子 但我的问题略有不同 打包具有许多其他 jar 文件作为依赖项的简单 Java 应用程序的最佳实践是什么 例如 我有 foo java 其中包含 main 以及从 foo java 访问的 foo1 java f