Замена токенов в коде Java работает для меня.Я использую что-то вроде этого перед задачей компиляции:
<copy todir="${target.dir}/java" filtering="false">
<fileset dir="${src.dir}/java"/>
</copy>
<replace dir="${target.dir}/java" value="DEMO_MODE = ${demo.mode}">
<replacetoken>DEMO_MODE = true</replacetoken>
</replace>
Сначала я копирую файлы Java во временную папку, затем заменяю токены.Javac эти скопированные файлы.$ {demo.mode} может быть задан в качестве параметра даже в командной строке или в файле свойств.DEMO_MODE является общедоступной статической конечной логической переменной в классе.
Еще две вещи, которые могут быть вам полезны:
Вы можете настроить условные присваивания свойств в целях:
<condition property="distribution.postfix" value="-demo" else="">
<equals arg1="${demo.mode}" arg2="true" />
</condition>
И вы можете использовать , если и , если только условия для целей:
<target name="demotarget" depends="jar" if="demo.mode">
...
</target>
На самом деле, я бы предпочел модульность и другие цели для выпусков PRO и DEMO,возможно, переключаемые функции, но мы используем эти приемы для чего-то другого, в частности для выпусков «Разработка против производства»: код разработки содержит больше журналов отладки, которые мы не хотим видеть в производственном программном обеспечении с конфигурацией logLevel = DEBUG.Кроме того, производственный код запутан, а разработка - нет, поэтому последний создает, например, читаемые трассировки стека.