mfcheer

原理

原理

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

← 全部文章

留言