2

アプリケーションの構築中にjnlpの文字列を置き換える方法を教えてもらえますか?これが私が従うステップです。

  1. 次のような文字列コンテンツを含むjnlpファイルを作成します

    <jnlp spec="1.0+" codebase="%$%test.url$" href="test.jnlp">
    
  2. そして、私たちのアプリケーションは環境に依存しています。戦争を生成している間、コマンドライン引数をantbuildに渡します。したがって、このコマンドライン引数に基づいて、プロパティファイルに別のURLを保持します。
  3. アプリケーションの構築中に、jnlpで環境に依存するURLを置き換えることができませんでした。

誰かがこれについて提案できますか?

4

1 に答える 1

1

antに引数を渡して環境を選択するには、たとえばantで開始するant -Denv=prodant -Denv=test、プロパティに基づいてantbuild.xmlで決定を下しenvます。

次のように、選択した環境に基づいて他のプロパティを設定できます。

<target name="compile" depends="init" description="compile the source">
  <!-- settings for production environment -->
  <condition property="scalacparams"
             value="-optimise -Yinline -Ydead-code -Ywarn-dead-code -g:none -Xdisable-assertions">
    <equals arg1="${env}" arg2="prod"/>
  </condition>
  <condition property="javacparams" value="-g:none -Xlint">
    <equals arg1="${env}" arg2="prod"/>
  </condition>

  <!-- settings for test environment -->
  <condition property="scalacparams" value="-g:vars">
    <equals arg1="${env}" arg2="test"/>
  </condition>
  <condition property="javacparams" value="-g -Xlint">
    <equals arg1="${env}" arg2="test"/>
  </condition>

  <!-- abort if no environment chosen -->
  <fail message="Use -Denv=prod or -Denv=test">
    <condition>
      <not>
        <isset property="scalacparams"/>
      </not>
    </condition>
  </fail>

  <!-- actual compilation done here ->
</target>

<if>また、特定の環境に対してのみ特定のアクションを実行するために使用することもできます。

  <if> <!-- proguard only for production release -->
    <equals arg1="${env}" arg2="prod" />
    <then>
      <!-- run proguard here -->
    </then>
  </if>

最後に、環境に応じてファイルに文字列を挿入するには、最初に(上記のように)どの環境が選択されているかを確認してからプロパティを設定し、次に次のようにします。

<copy file="template.jnlp" tofile="appname.jnlp">
  <filterset begintoken="$" endtoken="$">
    <filter token="compiledwith" value="${scalacparams}"/>
    <!--- more filter rules here -->
  </filterset>
</copy>

これは、template.jnlpが$で囲まれたプレースホルダーを持つファイルであると想定しています。この例では、template.jnlpの$ compiledwith $は、以前に設定されたscalaコンパイラー・パラメーターに置き換えられ、結果はappname.jnlpに書き込まれます。

于 2012-10-12T07:35:30.590 に答える