问题标签 [fatjar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
619 浏览

java - 使用 gradle 管理的所有依赖项编译一个 groovy 脚本,然后通过命令行将其作为独立应用程序运行

我有一个带有单个 java 库依赖项的简单 groovy 脚本:

我正在使用 gradle 来管理项目的依赖关系。该项目的 gradle 配置也非常简单:

如果我从 Intellij IDE 运行脚本,脚本会按预期执行。

我现在想做的是将具有这种依赖关系的脚本编译成一个 .jar 文件,这样我就可以这样分发它,并从任何文件系统路径运行应用程序,因为脚本逻辑将依赖于执行被调用。

我已经尝试了一些 gradle fat jars 示例,但没有一个对我有用,因为 .jar 文件Could not find or load main class Loading在我尝试运行时不断抛出。

如果有人愿意提供提示或展示一个 gradle 任务的示例,该任务将执行符合我描述的需求的构建,我将非常感激。

我也知道带有@Grab注释的 groovy 模块 Grape,但我将其作为最后的手段,因为我不希望用户等待依赖项下载,并希望将它们与应用程序捆绑在一起。

我在项目中使用 groovy 2.5.6 和 gradle 4.10

谢谢

0 投票
0 回答
52 浏览

java - 汤姆EE | CDI - Fat JAR 部署与托管 bean 生命周期不兼容

我在 Fat JAR 类型的部署中运行我的 TomEE,最近我注意到我的生命周期在中断(信号)@PreDestroy时没有被触发。^C我相信这可能是因为当 Fat JAR 爆炸成 WAR 时,WAR 会在单独的 JVM 中运行。我注意到,如果我配置自己的关闭挂钩,它确实会触发。

应用程序.java

但是,这不是最终的解决方案,因为我还有未触及的生命周期。Spring Boot 使用其 Fat JAR 及其预配置的关闭钩子很好地处理了这个问题。它的代码可以在这里看到。

我希望 TomEE 开发人员可以在这个问题上发表意见。目前,我看到任何使用 Fat JAR 的人都容易出现这个问题,除非他们编写了自己的托管 bean 关闭挂钩。

0 投票
1 回答
55 浏览

static - 使用静态工厂方法时 fat jar 中的主类失败,但在 IDE 中工作正常

我有一个小项目,我正在使用 shadowJar 创建一个从命令行运行的 fatjar。

主类入口点使用这样的静态工厂方法获取项目中的类的引用

当我在命令行运行 fat jar 时,我得到一个像这样的错误

但是,如果我注释掉静态工厂调用 - 并重新生成,那么胖 jar 运行正常并将 howdi 打印到控制台。

如果我再次取消注释工厂查找,只需在 IDE 中运行 Launcher 类,代码就可以正常工作,没有问题

那么为什么它作为fatjar失败,但作为普通项目工作?其次假设它与 fatjar zip 方法有关 - 我该如何克服这个问题?

我有一个项目的早期版本,它直接在项目类上调用静态方法,并且作为 fatjar 工作正常 - 所以问题在于 fatjar 中的静态工厂行为。

我尝试使用加载类

类可以正常加载 - 但工厂调用本身仍然会中断,如堆栈跟踪中所示

有人可以帮我解决这个问题吗?

0 投票
1 回答
85 浏览

fatjar - 如何确定从中调用 fatjar 的工作目录

我有一个项目,我把它做成了一个 fatjar。Gradle 将其放入 /build/libs

我已经进入这个目录并使用一个文件作为参数调用了 fatjar。

脚步

  1. cd /构建/库
  2. java -jar .jar --执行脚本.groovy

这将启动 Main-Class - 一个从命令行读取 args 的启动器类。

但是,您得到的文件名是“script.groovy”,这应该与我拥有 jar 文件的目录相同

但是,如果您在类 /fatjar 中查看

或者

他们都将路径报告为 projectRoot 目录 - 而不是 jar 本身的运行位置(/build/libs)

在你的类中,在 fatjar 中,当从命令行调用时,你如何确定 fatjar 实际所在的目录?

0 投票
1 回答
5664 浏览

java - JDK11/JavaFX:如何在没有构建/依赖管理的情况下制作一个胖 jar?

我认为不用说我应该能够使用 Oracle 自己的 JDK 和 JavaFX(来自 gluonhq)来构建一个用户可以使用的可分发 jar 文件。

经过详尽的搜索,大量阅读(过去几个月 24 小时或更长时间),最后是这个谷歌搜索查询:

我绝对走到了尽头。到底为什么要做这么多工作?我如何构建一个 JavaFX 应用程序并将其提供给想要实际使用它的人,而不知道其他任何东西,除了如何使用应用程序本身?

0 投票
0 回答
211 浏览

android-gradle-plugin - 将 Mobbeel Fataar 插件与 uploadArchives 任务一起使用时出现问题

我正在尝试创建一个胖 AAR 来分发我的 Android 库。我正在使用Mobbeel Fataar 插件将我的所有依赖项打包到 AAR 中,以便于分发。这完美地工作,当我运行时./gradlew build,我得到一个 AAR 文件,它在其目录mylibrary/build/outputs/aar/中包含我的所有依赖项。当我尝试分发 AAR 时,问题就出现了。mylibrary-release.aarlibs

为了分发,我找到了这个教程来指导我,我几乎没有使用它。这是代码(在我的build.gradle):

问题是,当我运行时./gradlew :mylibrary:uploadArchives,它会在其中创建一个mylibrary-1.0.aar文件mylibrary/build/outputs/aar/并上传该文件。问题是它没有捆绑我的依赖项。

我想以某种方式创建mylibrary-1.0.aar捆绑了我的所有依赖项,然后将其上传。不幸的是,我对我使用的上传代码的工作原理没有完全清楚的了解。有谁知道我怎样才能做我想做的事?

0 投票
1 回答
437 浏览

visual-studio-code - 是否可以使用 Xtext Fat Jar 语言服务器创建 VS Code 扩展?

我正在尝试从 Xtext 创建的 FatJar 语言服务器中创建 VS Code 扩展。我还看到了示例项目(https://github.com/itemis/xtext-languageserver-example),但只有一个示例使用了对位于同一存储库中的父 xtext 项目的引用。是否可以直接从本地 jar 获取语言服务器(例如,直接位于 vscode 扩展项目中的目录 /server 中)?

0 投票
2 回答
221 浏览

gradle - 在 OSGi fat jar bundle 中查找重复的 JAR

我目前正在从事一个项目,该项目导致在 OSGi 上下文(Apache Felix)中运行的胖 JAR。有没有办法/命令来检查我嵌入到我的胖罐子中的一些罐子是否也可以从其他捆绑包和服务中获得,以便我可以删除它们(从而使胖罐子更小)?

我构建胖 jar 的原因是因为我使用不同的构建系统来构建我的 jar。(我使用的是 Scala 和 SBT,其他一切都是用 Java 和 Gradle 构建的)

0 投票
1 回答
1347 浏览

java - 如何在没有源文件但使用胖 jar 的情况下运行 gradle JUnit 测试作业?

我对 JVM 世界很陌生,不知道如何解决以下问题:

我有一个 gradle 项目,它创建一个测试 uber jar(使用shadowJar插件构建),并将 JUnit 测试作为其输出。我可以使用这样的东西在同一个项目中运行这个 uber jar:

然而,我想要的是创建一个非常小的gradle.build文件来运行与预先构建的 jar 相同的作业。详细说明一下:我有一个创建这个胖 jar 的项目 A,我想要一个只有runFatJar任务而没有源的项目 B。

我试着用我的项目 B 做这样的事情:

我的文件夹结构如下所示:

在我运行后gradle runFatJar它变成了这样:

但是 gradle 输出并没有真正做任何事情:

我什至不知道现在为什么要选择它。有没有办法在没有实际源代码文件的情况下强制开始这项工作?

0 投票
1 回答
1015 浏览

java - 如何在可运行的 jar 中包含 OJDBC 驱动程序?

我有一个 Java 项目,它连接到 Oracle 12c 数据库。以前,ojdbc jar(和所有其他依赖项)必须位于类路径上才能使 jar 能够运行。然而,这是一个独立的应用程序,所以我想设置一个构建过程,最终吐出一个包含所有依赖项的 jar。我做了以下步骤:

  • 将项目转换为 Maven 项目
  • 将 Log4j 等依赖项设置为 Maven 依赖项
  • 按照指南,我设法将 ojdbc 作为依赖项包含在内
  • 设置 maven-assembly-plugin 以生成一个可运行的 jar,如下所示:

生成的 jar 以类文件的形式包含大部分依赖项,例如,在 jar 的根目录中有一个“org/apache/log4j”文件夹,其中包含 Log4j 类文件。问题是 ojdbc (com/oracle/jdbc) 不存在,并且我正在获取 ClassNotFoundExceptions 运行时。我检查了 ojdbc jar 存在于我的 .m2 文件夹下的正确路径中。

有没有办法在我的可运行 jar 中包含 ojdbc 依赖项,无论是作为 jar 还是作为类文件?

编辑:根据 Essex Boy 的评论,我使用了这样的阴影插件:

有了这个,我得到了一个类似的 jar,具有大多数依赖项,但 ojdbc 仍然被排除在外。我尝试添加一个 artifactSet 标签,并明确包含“com.oracle.jdbc:ojdbc8”,但仍然没有添加。唯一的好处是,使用 minimizeJar 选项,我得到了一个较小的 jar,其中仅包含实际依赖项。