2013-05-06 3 views
0

У меня есть проект eclipse с двумя основными методами и задавался вопросом, возможно ли создать файл jar, который запускает скрипт Apache Ant, когда файл jar выполняется. Я предоставил сценарий Ant ниже, где запускаются два основных метода. Заранее спасибо.Как создать файл jar с скриптом 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> 
+0

Что вы пытаетесь достичь , в точку? –

+0

Когда я запускаю файл jar, поэтому java -jar-файл.jar, я бы хотел, чтобы jar запускал скрипт ant, который запускает два основных метода, указанных в исходном сообщении. – user1087943

+0

Почему бы вам не создать исполняемый банку, а затем вызвать основные методы файлов классов, а скорее вызвать скрипт ant для выполнения этих методов. Если вам нужно, я могу предоставить вам пример – NullPointerException

ответ

0

Зачем вам нужен Ant? Из комментария я выводю, что вы хотите, чтобы ваша Java-программа запускала другую. Если это так, просто используйте:

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

или что-то еще в командной строке. Обратите внимание, что есть более продвинутые версии Runtime.getRuntime().exec(), так что посмотрите на javadoc.

EDIT: от Runtime.getRuntime().exec() документов:

Выполняет указанную команду строки в отдельном процессе.

Таким образом, вы создаете еще одну независимую JVM.

Не используйте непосредственно java ..., вместо этого создайте команду с использованием переменных среды: это только для демонстрации функции.

В любом случае, если вам нужно сделать это при запуске, я предлагаю вам использовать сценарий оболочки, запускающий три программы.

+0

Извинения за путаницу. Я ищу все java-программы, которые запускаются независимо друг от друга на отдельных JVM-консолях и консолях. Поэтому поэтому я использовал скрипт Ant. Я бы хотел, чтобы при запуске Jar-файла выполнялся скрипт ant, который бы породил несколько других команд с конкретными файлами jar, работающими на них. – user1087943

+0

Если вы используете 'Runtime.exec()' другой процесс (и, следовательно, JVM) порождается. Проверьте править выше. –

0

Создать баночку с использованием муравья

<target name="jar" depends="compile"> 
    <mkdir dir="${jar.dir}"/> 
    <jar destfile="${jar.dir}/helloworld.jar" basedir="${classes.dir}"/> 
</target> 

При включении нескольких основных классов в одном банке файла, то каждый из них должен быть вызван с помощью -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> 

И выполнить

java -jar helloworld.jar 

Выход этого

I am main 1 
I am main 2 
+0

OP хочет, чтобы программы «запускались независимо друг от друга на отдельных JVM и консолях». –

Смежные вопросы