Можно ли изменить исходный код с помощью муравья? - PullRequest
0 голосов
/ 26 февраля 2010

Я хотел бы сделать условную компиляцию в моей программе. Я знаю, что если вы объявите public static final boolean, компилятор будет игнорировать ветвь, которая не пройдена. Возможно ли, чтобы цель ant изменила переменную перед сборкой программы?

Например, если у меня есть:

final public static boolean windows = false;

Я бы хотел две цели для муравьев: Windows и Mac. Я хотел бы команду ant windows изменить логическое значение на истинное, в то время как ant mac оставляет переменную как есть.

Спасибо.

Ответы [ 5 ]

11 голосов
/ 26 февраля 2010

Вы можете заставить Ant изменить файл свойств, а затем довольно легко прочитать этот файл в своем приложении:
new Properties(new FileInputStream("filename" / new File(filename))),

и прочитайте свойства, используя:
Boolean isWindows = new Boolean(properties.getProperty("windows"))

или:
String os = properties.getProperty("os").

Для этого вы можете использовать задачу Ant PropertyFile: http://ant.apache.org/manual/Tasks/propertyfile.html.

Редактировать: вот альтернативный вариант использования другой задачи, если вам абсолютно необходимо отредактировать файл исходного кода с помощью Ant:

<replaceregexp file="blah.java" match="public static final boolean WINDOWS = \"(.*)\"" replace="public static final boolean WINDOWS = \"" + ${properties.windows} + "\"" />
- при необходимости замените код на свой. Подробнее см. http://ant.apache.org/manual/Tasks/replaceregexp.html.

1 голос
/ 26 февраля 2010

Свойства и задачи замены должны дать вам то, что вам нужно. Я согласен с тем, что поиск другого подхода - хорошая идея.

Однако, если по каким-то причинам встроенные задачи не получат вас что вам нужно, это довольно легко написать пользовательское задание для муравья. Смотри http://ant.apache.org/manual/develop.html

1 голос
/ 26 февраля 2010

Вы должны внимательно прочитать другие ответы и посмотреть, есть ли лучшее решение для вас. Однако Ant имеет задачу заменить текст в файлах. Например:

1 голос
/ 26 февраля 2010

Пропускать файлы муравьев и свойств и т. Д., Java уже делает это!

Используйте что-то вроде System.getProperty ("os.name");

0 голосов
/ 26 февраля 2010

Вы также можете указать значение командной строки в качестве аргумента при вызове основной программы Java из Ant.

Например, ant -f build.xml "YouranttaskName" -Doperatingsys="windows"

Внутри build.xml

<target name="YouranttaskName">
<java classname="javaclassname" fork="true" >
<arg value="${operatingsys}" />
</java>
</target> 

Внутри метода java -main это значение аргумента будет доступно в том же порядке .i.e. args [0] содержит «Windows».

Вы можете написать свою логику, считая, что это значение вашей ОС по умолчанию, поскольку пользователь может не предоставить аргумент командной строки, а затем соответственно установить параметр boolean flag'.

...