【问题标题】:Use a standalone JAR file in a Grails web application在 Grails Web 应用程序中使用独立的 JAR 文件
【发布时间】:2015-09-28 18:17:51
【问题描述】:

我正在构建一个需要在其核心使用独立 JAR 文件的 Web 应用程序。本质上,我有一个打包为 JAR 文件的应用程序模块,我可以使用如下命令在命令提示符下成功运行:java -jar myapp.jar,并且可以根据需要传递一些额外的参数(基本上是要处理的文件名)。此 JAR 对其他 JAR 文件有一些依赖关系,这些文件位于与 myapp.jar 文件相同的文件夹中的 libs 文件夹中。作为通过命令提示符执行的独立 JAR 文件,所有这些都可以正常工作。

现在,我需要在 Web 应用程序中使用这个 JAR 并进行相同类型的处理。我已经有了一个基于 Grails 的 Web 应用程序设置以及所需的 UI 等,并且我已经在我的 Grails Web 应用程序的 lib 文件夹中添加了所有必需的 JAR 库。我也将myapp.jar 文件放在了同一个lib 文件夹中。

我对如何通过我的 Web 应用程序的 Controller 方法运行这个 myapp.jar 文件感到有些困惑?基本上,我的 Web 应用程序中有一个表单,用户可以在其中指定myapp.jar 处理所需的文件路径,然后用户单击“运行/提交”按钮。在那之后,我需要使用提供的文件路径参数启动myapp.jar,并将生成/处理后的文件放在某个指定位置。

所以,本质上是通过 Web 应用程序的控制器方法在命令提示符下执行类似于独立 JAR 执行的处理。

有人可以指导我完成此任务的正确流程吗?

在这方面的任何帮助将不胜感激。

【问题讨论】:

    标签: java grails web-applications jar


    【解决方案1】:

    如果您查看myapp.jar 文件中/META-INF/ 目录中的MANIFEST.MF,您应该会找到Main-Class 属性。例如,如果主类是com.example.MyApp,您应该能够从您的代码(即,从您的 Grails 控制器方法)调用它的静态主方法。

    String[] args = new String[] { '/path/inputFile', '/path/outputFile' }
    com.example.MyApp.main(args)
    // do something with output file
    

    如果您有权访问 myapp.jar 的源代码,您最好查看 main 的功能,然后直接使用 API。

    【讨论】:

    • 感谢约翰指导我。我现在正在尝试第一种方法,并且感觉可能会达到我的目的。不幸的是,我无法访问myapp.jar 的源代码,因此无法直接使用 API。
    • 约翰,所以我能够使用你提到的方法。但有一些小的修改。使用您提到的语法,我收到了以下类型的错误:Groovy:No expression for the array constructor call。因此,我修改了语法并将这两个语句组合为:com.example.MyApp.main(["inputFile"] as String[])。这现在工作正常。再次感谢您为我指明正确的方向。
    • 约翰,如果你不介意的话,你也可以看看this question 吗?这是这个问题的延伸,但主题略有不同,因此想在不同的对话中跟踪它。
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2013-05-17
    • 2023-03-12
    相关资源
    最近更新 更多