Matlab-如何编译JAR文件

时间:2018-07-25 20:17:01

标签: 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中使用选项Properties> Java Compiler> Compiler Compliance Level> 1.7),则导出的JAR可以正常工作:

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

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

>> !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中运行?

1 个答案:

答案 0 :(得分:1)

由于通过jar生成Eclipse时可以使用,但尝试Matlab时却无效,所以我最好的选择是将入口指向输入清单文件中的jar(即HelloWorld)未正确设置。如果从.java进行编译时使用.classMatlab文件的完整路径,则可能是罪魁祸首。您可以使用jars验证两个HelloWorld1.jar(即HelloWorld2.jarjar tf tool中的内容。因此,请在jar tfHelloWorld1.jar上使用HelloWorld2.jar,您应该会看到类似的区别

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外壳程序

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现在应该可以工作。