原理
python中,通过shell命令 commands.getoutput() 调用java
运行jar常见错误
linux运行
java -cp hello.jar hello
java -cp dependencies.jar com.bj.spat.hello
产生错误
Exception in thread "main" java.lang.UnsupportedClassVersionError: hello : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
原因是由较高版本的JDK编译的java class文件试图在较低版本的JVM上运行产生的错误。 <!-- more --> 1、解决措施就是保证jvm(java命令)和jdk(javac命令)版本一致。如果是linux版本,则在命令行中分别输入java -version和javac-version命令来查看版本是否一致。这里假设都是1.7版本。
2、如果都一致,但还是解决不了问题,那么你肯定不是直接在命令行中用javac来编译的,而是用类似于eclipse、netbeans这样的编译器来编译的。因为很多编译器都自带javac,而不是采用操作系统中的编译器。如果你的编译器是eclipse的话,那么需要在项目的属性里设置jdk版本,方法是右击项目-->properties-->java compiler --> Enable project specific settings -->将compiler compliance level设置为1.7,也就是与jvm一致的版本(在命令行中java -version所显示的版本)。
综上,如果你是用编译器来编译的话,请首先确保编译器自带的jdk版本是否和操作系统中的java版本一致。
给jar传参数
java -cp hello.jar hello "参数"
public class hello {
public static void main(String []args) {
System.out.println(args.length);
for(int i=0;i<args.length;i++)
{
System.out.println(args[i]);
}
}
}
java -cp hello.jar hello 123456
输出 1 123456
python代码
import commands
import json
if __name__ == "__main__":
id = str(123)
command = "java -cp hello.jar hello " + id
line = str(commands.getoutput(command))
print line
运行python 输出 1 123456
maven依赖包打jar包
1、maven pom中添加:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<!-- <version>2.1</version> -->
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
maven build输入命令:
assembly::assembly
或
mvn build: 把工程依赖包打到lib路径下
dependency:copy-dependencies -DoutputDirectory=lib
留言