主要思路是通过subprocess执行jar包。
两种方式:
- java -jar jarName args
import subprocess
command = 'java -jar demo.jar %s %s' %(arg0,arg1)
stdout = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()[0]
这种方式需要在jar包META-INF\MANIFEST.MF文件中,指定Main-Class参数,即java -jar命令执行的类。
比如用maven打包,指定<mainClass>demo.Demo</mainClass>:
<!-- 打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<!-- 生成MANIFEST.MF的设置 -->
<manifest>
<!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!-- jar启动入口类 -->
<mainClass>demo.Demo</mainClass>
</manifest>
</archive>
<includes>
<include>**/*.*</include>
</includes>
</configuration>
</plugin>
- java -cp jarPath packname.classname args
这种方式不需要指定Main-Class参数,适用于一个jar包里有多个待执行类,如demo.jar里有package demo,里面包含两个类Demo1和Demo2,则调用Demo1如下:
import subprocess
command = 'java -cp c:/jarPath/demo.jar demo.Demo1 %s %s' %(arg0,arg1)
stdout = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()[0]