java - Matlab - 如何编译 JAR 文件

标签 java matlab jar

在 Matlab R2014b、JRE 9 下,遵循 this 等几个示例后,我可以成功调用给定的 JAR,但无法使用我自己编译的 JAR。

对于这个HelloWorld.java:

public class HelloWorld{
    public HelloWorld(){
        System.out.println("Constructor");
    }
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}

Matlab R2014 使用 Java RE 1.7。如果我为 JRE 1.7 构建代码(在 Eclipse 中,使用选项“属性”>“Java 编译器”>“编译器合规性级别”> 1.7),则导出的 JAR 工作正常:

>> javaaddpath('HelloWorld.2.jar')
>> HelloWorld
HelloWorld@4492d317

但是如果我尝试自己的任何命令,生成的 JAR 在 Matlab 中会失败:

>> !javac -source 1.7 -target 1.7  HelloWorld.java
>> !javac -source 1.7 -target 1.7 -bootclasspath [Path to Matlab RT\]rt.jar HelloWorld.java

>> !jar cf HelloWorld1.jar HelloWorld.class
>> !jar cfe HelloWorld1.jar HelloWorld HelloWorld.class

>> javaaddpath('HelloWorld1.jar')
>> HelloWorld
Undefined function or variable 'HelloWorld'.

我应该使用哪些命令行来编译自己的 JAR 文件以便在 Matlab 中运行?

最佳答案

由于当您通过 Eclipse 生成 jar 时它可以工作,但当您从 Matlab 尝试时它却不起作用,所以我最好的选择是jar 的入口点名称(即 HelloWorld)未在 list 文件中正确设置。如果您在从 Matlab 编译时使用 .java.class 文件的完整路径,那么这可能是罪魁祸首。您可以使用 jar tf 工具 验证两个 jar(即 HelloWorld1.jarHelloWorld2.jar)内的内容。因此,在 HelloWorld1.jarHelloWorld2.jar 上使用 jar tf,您应该会看到类似的差异

For HelloWorld2.jar you should see
META-INF/
META-INF/MANIFEST.
HelloWorld.class

For HelloWorld1.jar you probably would see
META-INF/
META-INF/MANIFEST.
<some_path>/HelloWorld.class <- this is the problem

要解决此问题,您可以使用以下步骤。在 Matlab shell

1. Change directory to the location of HelloWorld.java
   >> cd 'path_to_hello_world.java'
2. Compile the code with the default bootclass
   >> !javac -source 1.7 -target 1.7 HelloWorld.java
3. Jar the file using HelloWorld as your entry point
   >> !jar cfe HelloWorld1.jar HelloWorld HelloWorld.class
4. Test
   >> !java -jar HelloWorld1.jar % you should see Hello World!
如果步骤 4 有效,

javaaddpath 现在应该可以工作。

关于java - Matlab - 如何编译 JAR 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51527027/

相关文章:

java - 启动tomcat时spring源码工具中的SVN问题

Java数组比较

matlab - 如何同时运行simulink仿真和matlab脚本

java - 如何为 Java 添加依赖项?

java.lang.RuntimeException : java. security.NoSuchAlgorithmException:找不到为 SecureRandom 配置的类(提供者:IBMJCE)

java - 如何在 JSP 上显示 RuntimeException

java - 创建打印数组的方法

matlab - 在Matlab中进行奇异值分解

使用 FDM 的 Matlab 2D 波动方程

java - 在 Jar 中读取和写入文件