我目前有一个eclipse项目,有两个主要方法,我想知道是否有可能创建一个jar文件,在jar文件执行时运行Apache Ant脚本。我在下面提供了一个Ant脚本,其中运行了两个主要方法。提前谢谢。
<?xml version="1.0"?>
<project name="Test" default="run_external">
<target name="compile">
<delete dir="bin" />
<mkdir dir="bin" />
<javac srcdir="src" destdir="bin" />
</target>
<target name="run_external" depends="compile">
<parallel>
<exec executable="cmd" dir="bin">
<arg value="/c start cmd.exe /k java test.Main" />
</exec>
<exec executable="cmd" dir="bin">
<arg value="/c start cmd.exe /k java test.Main2" />
</exec>
</parallel>
</target>
</project>
为什么需要Ant?从注释中我推断出您希望Java程序启动另一个程序。如果是,只需使用:
Runtime.getRuntime().exec("java -jar otherprogram.jar");
或任何命令行。请注意,Runtime.getRuntime().exec()
有更高级的版本,所以请查看javadoc.
编辑:from Runtime.getRuntime().exec()
docs:
在单独的进程中执行指定的字符串命令。
所以你正在生成另一个独立的JVM。
不要直接使用java ...
,而是使用环境变量组合命令:这只是为了演示功能。
无论如何,如果您需要在启动时执行此操作,我建议您使用shell脚本启动这三个程序。
使用ant创建jar
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/helloworld.jar" basedir="${classes.dir}"/>
</target>
当您在一个jar文件中包含多个主类时,必须使用-cp标志并使用指定的主类的完全限定名来调用每个主类。
java -cp helloworld.jar com.test.Main1 && java -cp helloworld.jar com.test.Main2
这将给你一个输出(我只是打印了类名)
I am main 1
I am main 2
或者根据您的需求,您可以创建单个入口点(我更喜欢这个),我的意思是一个具有主方法的单个类,然后从这个类调用其他主方法
例子创建一个类
public class Main {
public static void main(String[] args) {
Main1.main(args);
Main2.main(args);
}
}
在Manifest中包含这个主类。MF
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/helloworld.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="com.test.Main"/>
</manifest>
</jar>
</target>
And execute
java -jar helloworld.jar
该
的输出 I am main 1
I am main 2