Все,
У меня есть проект платформы NetBeans (не просто проект, который я написал в NetBeans, а проект, использующий богатая клиентская среда, предоставляемая NetBeans). Я могу запустить проект с помощью команды ant run
. Теперь я хочу передать аргумент, который будет проходить через ant
, чтобы быть доступным через метод System.getProperty
.
Я понимаю, что мне нужно использовать узел <sysproperty>
, чтобы фактически вставить пару ключ/значение в среду выполнения, но я не могу понять, как заставить это работать с запутанным деревом сборки, которое NetBeans создает для вас ( build.xml зависит от build-impl.xml, который, в свою очередь, зависит от ${harness.dir}/suite.xml, который, в свою очередь, зависит от ${harness.dir}/run.xml)
самый простой пример, который я нашел, это
<target name="run" depends="compile">
<java classname="prop"
fork="true">
<sysproperty key="test.property"
value="blue"
/>
</java>
</target>
но проблема в том, что ни в одном из моих xml-файлов нет такого легкодоступного узла <java>
. Я думаю, что мне удалось отследить поток выполнения до того места, где что-то действительно вызывается (в ${harness.dir}/run.xml
)
<target name="run" depends="-prepare-as-app,-prepare-as-platform">
<touch file="${cluster}/.lastModified"/> <!-- #138427 -->
<property name="run.args" value=""/>
<property name="run.args.ide" value=""/>
<property name="run.args.extra" value=""/>
<condition property="run.args.mac" value="-J-Xdock:name=${app.name}" else="">
<os family="mac"/>
</condition>
<exec osfamily="windows" executable="${run.exe}" failonerror="no" resultproperty="result.prop">
<arg value="--jdkhome"/>
<arg file="${run.jdkhome}"/>
<arg line="${run.args.common}"/>
<arg line="${run.args.prepared}"/>
<arg line="${run.args}"/>
<arg line="${run.args.ide}"/>
<arg line="${run.args.extra}"/>
</exec>
<exec osfamily="unix" dir="." executable="sh"
failonerror="no" resultproperty="result.prop">
<arg value="${run.sh}"/>
<arg value="--jdkhome"/>
<arg file="${run.jdkhome}"/>
<arg line="${run.args.common}"/>
<arg line="${run.args.prepared}"/>
<arg line="${run.args}"/>
<arg line="${run.args.ide}"/>
<arg line="${run.args.extra}"/>
<arg line="${run.args.mac}"/>
</exec>
<fail>
The application is already running within the test user directory.
You must shut it down before trying to run it again.
<condition>
<and>
<isset property="result.prop" />
<or>
<!-- unknown option exit code as returned from IDE by org.netbeans.api.sendopts.CommandLine -->
<equals arg1="${result.prop}" arg2="50346" />
<!-- unknown option exit code as returned from platform app by org.netbeans.CLIHandler -->
<equals arg1="${result.prop}" arg2="2" />
</or>
</and>
</condition>
</fail>
</target>
Как видите, нет узла <java>
, под которым я могу поместить свое пользовательское системное свойство. Более того, мне кажется очень неправильным возиться с XML-файлами, чтобы внедрить свойство, которое влияет только на один из моих проектов, а не на все из них. Так как же правильно убедиться, что свойство командной строки, которое я передаю в ant run, попадет в проект платформы NetBeans?