2013-03-23 2 views
0

Я передаю файл «testFile.txt» в свою Java-программу в качестве аргумента с использованием Eclipse, и он отлично работает, когда я выбираю запустить его в обычном режиме. Если я бегу Ant build.xml в Eclipse, с «testfile.txt» установлен в качестве аргумента, я получаю ошибку:Как заставить Ant распознавать файл в папке проекта?

BUILD FAILED Target «testfile.txt» не существует в проекте «MyProj1».

Если я использую Ant и передать файл в Linux оболочку, используя строку:

ant -Dargs="testFile.txt" run 

он передает значение String «testfile.txt», но не может найти соответствующий файл. Файл находится в папке MyProj1, где находятся src и build.xml. Мне нужно переместить файл .txt или изменить файл сборки? Если мне нужно изменить файл сборки, что мне нужно?

<target name="run" depends="compile" description="run the project"> 
    <java dir="${build.dir}" classname="${main.class}" fork="yes"> 
     <arg line="${args}"/> 
    </java> 
</target> 
+0

Что значение build.dir? атрибут dir задачи java должен быть установлен в каталог, из которого вы хотите запустить Java, то есть MyProj1 –

+0

. Мои свойства имеют следующие значения: jhurd

+0

Итак, вы, вероятно, должны использовать '' вместо этого. Текстовый файл отсутствует в файле build.dir. –

ответ

0

Добавить

<arg file="testFile.txt"/> 

Для задачи Java, а именно:

<target name="run" depends="compile" description="run the project"> 
    <java dir="${build.dir}" classname="${main.class}" fork="yes"> 
     <arg line="${args}"/> 
     <arg file="testFile.txt"/> 
    </java> 
</target> 

Это создаст абсолютный путь к /path/to/build.xml/directory, который где находится ваш файл.

Если ваш файл находится в подкаталоге, добавьте его к значению файла arg, ../ также работает так, как вы ожидали.

редактировать:

Структура каталогов

c:\project 
| 
+---PassFileViaAnt.class 
+---build.xml 
+---foo.txt 

Класс:

public class PassFileViaAnt { 
    public static void main(String[] args) { 
     for(String arg : args) { 
      System.out.println(arg); 
     } 
    } 
} 

задача:

<target name="run" description="run the project"> 
    <java dir="${build.dir}" classname="PassFileViaAnt" fork="yes"> 
     <arg file="${args}" /> 
    </java> 
</target> 

Команда:

c:\project> ant run -Dargs="foo.txt" 

Выход:

[java] C:\project\foo.txt 

Команда:

c:> ant -f c:\project\build.xml run -Dargs="foo.txt" 

выход

[java] C:\project\foo.txt 
+0

«testFile.txt» - это имя файла, который я передаю, чтобы протестировать мою программу, но кто-то еще будет смотреть на мой файл и использовать файл, который они назвали самим собой, который не будет с тем же именем. Как я могу сделать общий оператор как значение аргумента arg? – jhurd

+0

Будут ли они использовать build.xml для запуска класса? Если да, то у вас есть свойство вверху, чтобы установить их, если нет, вам не нужно беспокоиться об этом, просто убедитесь, что main() говорит, что он ожидает, когда аргументы неверны. –

+0

Кроме того, тестер не будет изменять мой файл сборки и, возможно, не сохранит их .txt-файл в моей папке проекта. – jhurd

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