Ant, проект платформы NetBeans — как передать аргументы командной строки и получить доступ через System.getProperties?

Все,

У меня есть проект платформы 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?


person I82Much    schedule 08.02.2011    source источник


Ответы (1)


В дистрибутиве вашего приложения RCP есть папка etc, и в этой папке находится файл yourapp.conf. Я думаю, что ответ, который вы ищете, есть. Например, из одного из моих приложений NB RCP:

# ${HOME} will be replaced by user home directory according to platform
default_userdir="${HOME}/.${APPNAME}/dev"
default_mac_userdir="${HOME}/Library/Application Support/${APPNAME}/dev"

# options used by the launcher by default, can be overridden by explicit
# command line switches
default_options="--laf Metal --branding xmled -J-Xms24m -J-Xmx64m"
# for development purposes you may wish to append: -J-Dnetbeans.logger.console=true -J-ea

# default location of JDK/JRE, can be overridden by using --jdkhome <dir> switch
#jdkhome="/path/to/jdk"

# clusters' paths separated by path.separator (semicolon on Windows, colon on Unices)
#extra_clusters=
person Daniel Kec    schedule 24.02.2011
comment
Я не вижу эту папку. (и выполнение grep для этих строк, то есть default_options, ничего не дает). Это только если вы создали установщик? - person I82Much; 24.02.2011
comment
создайте, например, zip-дистрибутив и загляните внутрь, там находится etc/{имя вашего приложения}.conf. Я предполагаю, что вы не заменили имя своего приложения при использовании grep. Итак, если ваше приложение называется Dune, имя файла будет Dune.conf. Папка просто должна быть там. - person Daniel Kec; 25.02.2011