【问题标题】:Recreating GitHub project without dependencies (Java)重新创建没有依赖项的 GitHub 项目(Java)
【发布时间】:2018-06-06 20:11:21
【问题描述】:

我想在我正在编写的脚本中使用 GitHub 存储库。脚本将在要求脚本具有最小依赖性的应用程序内运行。我的意思是它可以依赖于独立的 .jar 或库,但不能依赖于具有进一步依赖关系的.jar 或库。这是一项安全措施。我的脚本需要对 GitHub 项目有依赖关系,但该项目也有自己的依赖关系。有没有办法将 GitHub 项目及其依赖链压缩到一个独立的库或 .jar 中?

如果有帮助,我正在使用 IntelliJ(最新版本)。我需要使用的 GitHub 项目可以是以下之一:

https://github.com/RuedigerMoeller/fast-serialization

https://github.com/EsotericSoftware/kryo

我需要它非常快速和频繁地序列化和反序列化大型对象结构,否则我的程序不会对当前数据进行操作。

编辑:所以我确实解决了这个问题,解决方案是使用 Maven Shade 插件来编译 Maven 项目的 uber 或 fat .jar。这让我可以绕过安全措施。

【问题讨论】:

  • 将依赖项从一个 JAR 移动到另一个 JAR 对安全性有何帮助?你的要求毫无意义。
  • @SLaks 不是我的要求;我对此感到非常沮丧,但它确实让应用更容易检测到可能对其用户有害的代码。

标签: java git github intellij-idea dependencies


【解决方案1】:

对 GitHub 存储库具有依赖关系是具有 source 依赖项(它可能在自己的存储库中声明自己的二进制依赖项)。

您需要分叉该 repo,并将其 maven 项目转换为 generate a fat jar(例如 Shade plugin)。
您需要将该新工件发布到工件存储库(如您自己的 Nexus),以便您的项目依赖它。

【讨论】:

  • 为什么需要发布工件?如果您的构建脚本只是在本地生成它并将其发送到需要运行代码的机器上,那似乎就足够了。如果必须将它运送到一组机器,那么它真的取决于 OP 的部署模型的样子。比如说,如果是为了他们的工作系统,他们可能有允许这样做的构建工具,所以我可能不会在答案中包含这种类型的细节
  • @Dici 是的,如果您将其安装在本地 maven 缓存中,那就足够了。但是如果有人想重新编译您的项目,您仍然需要发布该工件以便其他人解决它。
  • 那是假设他们使用 maven。他们也可以将其提交到某个 lib 目录中的源存储库。完全取决于他们如何处理依赖关系。
  • 这为我指明了正确的方向。我不知道你可以用 Maven 制作 uber 或 fat .jars。我不得不在 IntelliJ 设置中搞乱一点,以使其正确构建 Maven 项目,但最终它工作了,我一切正常。谢谢@VonC!
猜你喜欢
  • 2015-05-11
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 2017-06-08
相关资源
最近更新 更多