0

アプリケーション用のJarファイルを生成するためのbuild.xmlがあります。

以下に示すように、build.xmlを直接呼び出そうとしています

import java.io.IOException;

public class RunBuild {

    public static void main(String args[]) throws IOException {
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec("/home/sai/Jan5WS/AntTest/build.xml");
    }

}

例外はスローされませんが、jarファイルは生成されません。

私は現在ubuntu12とant8.1バージョンを使用しています

誰かが何が間違っているのか教えてもらえますか?

ありがとう

編集部

私はそれをこのように実行してみました

public static void main(String args [])throws IOException {

File buildFile = new File("build.xml", "/home/sai/Jan5WS/AntTest");
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.executeTarget(p.getDefaultTarget());

}

しかし、その投げ

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/AntMain
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.apache.tools.ant.Project.initProperties(Project.java:313)
    at org.apache.tools.ant.Project.init(Project.java:300)
    at RunBuild.main(RunBuild.java:15)
4

5 に答える 5

1

次の 2 つのオプションがあります。

  1. System.execute("ant", "-f", "/home/nitesh/Projects/ANT_DEMO/RPM_ANT/SIS/build.xml") を使用して、新しい JVM で ant を実行します。
  2. ProjectHelper を使用して同じ JVM でビルドを実行します。コード サンプル:

        File buildFile = new File("/home/sai/Jan5WS/AntTest", "build.xml");
        Project p = new Project();
        p.setUserProperty("ant.file", buildFile.getAbsolutePath());
        p.init();
        ProjectHelper helper = ProjectHelper.getProjectHelper();
        p.addReference("ant.projectHelper", helper);
        helper.parse(p, buildFile);
        p.executeTarget(p.getDefaultTarget());

この場合、ant.jar と ant-launcher.jar はクラスパス上にある必要があります。

于 2013-02-04T19:40:41.337 に答える
1

通常の ant を想定すると、build.xml を実行することはできません。

ant を実行し、build.xml を引数として渡す必要があります。

(ライブラリを使用して ant プロジェクトを実行することが可能です。この質問を参照してくださいJava コードから Ant または NSIS スクリプトを呼び出すことは可能ですか? )

于 2013-02-04T06:20:52.597 に答える
0

私のために働いていることを試してみてください....

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class CreateJar {

        public static void main(String[] args) {

                Process process;
                try {
                        process = new ProcessBuilder("ant","-f" ,"/home/nitesh/Projects/ANT_DEMO/RPM_ANT/SIS/build.xml").start();
                        process.waitFor();
                        InputStream is = process.getInputStream();
                    InputStreamReader isr = new InputStreamReader(is);
                    BufferedReader br = new BufferedReader(isr);
                    String line;
                    while ((line = br.readLine()) != null) {
                      System.out.println(line);
                    }

                } catch (Exception e) {
                        e.printStackTrace();
                }



        }

}

ここにbuild.xmlがあります

<project name="rpmextract" default="jar" basedir=".">
<property name="build" location="build"/>
<target name="jar">
<jar destfile="app.jar" basedir="${build}/classes"/> 
</target>
</project>
于 2013-02-04T07:12:57.680 に答える
0

build.xml は実行ファイルではありません。これは単なる xml ファイルです。「ant」を実行し、コードから「-f」フラグを介してこの build.xml ファイルのパスを提供する必要があります。

于 2013-02-04T06:27:19.550 に答える
0

私は同じ問題を抱えていたので、次の手順で解決しました。

1.- ant バージョンの ant-launcher.jar をダウンロードします

2.- ライブラリに追加する

ここに画像の説明を入力

于 2016-03-24T15:20:59.870 に答える