在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中运行?
答案 0 :(得分:1)
由于通过jar
生成Eclipse
时可以使用,但尝试Matlab
时却无效,所以我最好的选择是将入口指向输入清单文件中的jar
(即HelloWorld)未正确设置。如果从.java
进行编译时使用.class
和Matlab
文件的完整路径,则可能是罪魁祸首。您可以使用jars
验证两个HelloWorld1.jar
(即HelloWorld2.jar
和jar tf tool
中的内容。因此,请在jar tf
和HelloWorld1.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
现在应该可以工作。