0

我目前有一个具有两种主要方法的 eclipse 项目,并且想知道是否可以创建一个 jar 文件,该 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>
4

2 回答 2

0

Why would you need Ant? From the comment I deduce that you want your Java program to launch another one. If so, simply use:

Runtime.getRuntime().exec("java -jar otherprogram.jar");

or whatever the command line is. Please note that there are more advanced versions of Runtime.getRuntime().exec(), so have a look at the javadoc.

EDIT: from Runtime.getRuntime().exec() docs:

Executes the specified string command in a separate process.

So you are spawning another indipendent JVM.

Don't use directly java ..., instead compose the command using environment variables: this is only for demostrating the function.

Anyway, if you need to do this at startup, I suggest you use a shell script launching the three programs.

于 2013-05-06T14:56:30.357 回答
0

使用 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

或者 根据您的要求,您可以创建单个入口点(我更喜欢这个),我的意思是一个带有 main 方法的类,然后从这个类中调用其他 main 方法

例子

创建一个类

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>

并执行

   java -jar helloworld.jar

这个的输出

 I am main 1
 I am main 2
于 2013-05-06T15:34:54.093 回答