2017-06-21 18 views
0

複数の異なるNetBeansプロジェクトがリンクされています。コンパイル時ライブラリとしてSubProjectにリンクするMainProjectがあります。NetBeans build.xmlファイルに設定されたAnt変数が表示されないサブプロジェクト

MainProjectのAntの変数を設定するためのAnt build.xmlスクリプトを変更しようとしています。私は正しくMainProjectでこの変数を設定して見ることができますが、SubProjectのAnt build.xmlスクリプトはこの変数を認識しません。私はMainProjectclean and buildを実行したときに

マイbuild.xmlスクリプトMainProject

<?xml version="1.0" encoding="UTF-8"?> 
<project name="MainProject" default="default" basedir="."> 
    <description>Builds, tests, and runs the project MainProject.</description> 
    <import file="nbproject/build-impl.xml"/> 

    <target name="-pre-init"> 
     <echo>MainProject Pre Init</echo> 
     <echo>${ant.version}</echo> 
     <property name="test.test.test" value="isset" /> 
     <echo>test.test.test=${test.test.test}</echo> 
    </target> 
</project> 

SubProject

<?xml version="1.0" encoding="UTF-8"?> 
<project name="SubProject" default="default" basedir="."> 
    <description>Builds, tests, and runs the project SubProject.</description> 
    <import file="nbproject/build-impl.xml"/> 
    <target name="-pre-init"> 
     <echo>SubProject Pre Init</echo> 
     <echo>test.test.test=${test.test.test}</echo> 
    </target> 
</project> 

の私build.xmlスクリプトは、今、私は次のような出力が得られます。

ant -f C:\\sandbox\\MainProject -Dnb.internal.action.name=rebuild clean jar 
MainProject Pre Init 
Apache Ant(TM) version 1.9.7 compiled on April 9 2016 
test.test.test=isset 
init: 
deps-clean: 
Updating property file: C:\sandbox\MainProject\build\built-clean.properties 
SubProject Pre Init 
test.test.test=${test.test.test} 
SubProject.init: 
SubProject.deps-clean: 
Updating property file: C:\sandbox\MainProject\build\built-clean.properties 
Deleting directory C:\sandbox\SubProject\build 
SubProject.clean: 
Deleting directory C:\sandbox\MainProject\build 
clean: 
MainProject Pre Init 
Apache Ant(TM) version 1.9.7 compiled on April 9 2016 
test.test.test=isset 
init: 
deps-jar: 
Created dir: C:\sandbox\MainProject\build 
Updating property file: C:\sandbox\MainProject\build\built-jar.properties 
SubProject Pre Init 
test.test.test=${test.test.test} 
SubProject.init: 
SubProject.deps-jar: 
Created dir: C:\sandbox\SubProject\build 
Updating property file: C:\sandbox\MainProject\build\built-jar.properties 
Created dir: C:\sandbox\SubProject\build\classes 
Created dir: C:\sandbox\SubProject\build\empty 
Created dir: C:\sandbox\SubProject\build\generated-sources\ap-source-output 
Compiling 1 source file to C:\sandbox\SubProject\build\classes 
SubProject.compile: 
Created dir: C:\sandbox\SubProject\dist 
Copying 1 file to C:\sandbox\SubProject\build 
Nothing to copy. 
Building jar: C:\sandbox\SubProject\dist\SubProject.jar 
To run this application from the command line without Ant, try: 
java -jar "C:\sandbox\SubProject\dist\SubProject.jar" 
SubProject.jar: 
Created dir: C:\sandbox\MainProject\build\classes 
Created dir: C:\sandbox\MainProject\build\empty 
Created dir: C:\sandbox\MainProject\build\generated-sources\ap-source-output 
Compiling 1 source file to C:\sandbox\MainProject\build\classes 
compile: 
Created dir: C:\sandbox\MainProject\dist 
Copying 1 file to C:\sandbox\MainProject\build 
Copy libraries to C:\sandbox\MainProject\dist\lib. 
Building jar: C:\sandbox\MainProject\dist\MainProject.jar 
To run this application from the command line without Ant, try: 
java -jar "C:\sandbox\MainProject\dist\MainProject.jar" 
jar: 
BUILD SUCCESSFUL (total time: 4 seconds) 

MainProjectで設定されているように、SubProject${test.test.test}変数の状態を表示させるにはどうすればよいですか?

編集 - 自分のプロジェクト用に自動生成されたNetBeans antを使用しています。 Netbeansはbuild-impl.xmlbuild.xmlを作成します。 antプロセスを呼び出すと、build-impl.xmlのターゲットが呼び出されます。その後、build-impl.xmlは私のカスタムコードをbuild.xmlで呼び出します。たとえば、NetBeans IDEでclean and buildを実行すると、build-impl.xmlの適切なターゲットが呼び出され、build-impl.xmlbuild.xmlのカスタムコードを呼び出します。私はbuild-impl.xmlのスクリプトを投稿することができますが、それらはNetbeans IDEによって生成されたものだけです。

+0

メインとサブのターゲット '-pre-init'も表示されます。何らかの理由? – Rao

+0

サブプロジェクトのターゲットはどのように呼び出されますか?再現可能なビルドスクリプトを投稿できますか?また、サブサント(https://ant.apache.org/manual/Tasks/subant.html – Rao

+0

Rao)を使用できるかどうかを確認してください。返信いただきありがとうございます。ご質問にお答えするために、私はNetBeans IDEを使用しています。 NetBeansは 'build-impl.xml'と' build.xml'を作成します。私は私の 'build.xml'を私の追加コードで掲示しました。私は 'build-impl.xml'を投稿できますが、IDEによって自動生成されています。ビルドを実行すると 'build-impl.xml'のターゲットが呼び出され、' build.xml'のカスタムコードが引き出されます。 '-pre-init'ターゲットは' build-impl.xml'によって提供され、 'build-impl.xml'で' init'ターゲットを実行する前にカスタムコードを実行します。 'build-impl.xml'ファイルにsubantがありませんでした。 –

答えて

0

.build-impl.xmlスクリプトを調べた後、私は答えを見つけ出すことができました。

私はMainProjectため.build-impl.xmlは以下のantコードでSubProjectのビルドを呼び出すことがわかった:

<antcall target="-maybe-call-dep"> 
    <param name="call.built.properties" value="${built-jar.properties}"/> 
    <param location="${project.SubProject}" name="call.subproject"/> 
    <param location="${project.SubProject}/build.xml" name="call.script"/> 
    <param name="call.target" value="jar"/> 
    <param name="transfer.built-jar.properties" value="${built-jar.properties}"/> 
    <param name="transfer.not.archive.disabled" value="true"/> 
</antcall> 

は今、この知識を持って、私はSubProjectだけMainProjectからフィールドの限られたセットへのアクセスを持っていたことを見ることができました。これらのフィールドの1つである${built-jar.properties}は、antプロパティファイルへのパスです。 ${built-jar.properties}ファイルの横に新しいプロパティファイルを作成しました。新しいプロパティファイルでは、保存したいすべてのant変数を入れました。今、SubProjectで私は新しいファイルを指す変数を作成しました。これには、${built-jar.properties}ファイルのdirnameコマンドを使用してディレクトリを取得します。それから私はloadproperties antコマンドを呼び出してすべての変数を読みました。

これはかなり長い回避策でしたが、最終的に私が望むようにすべてを得ました。

将来誰でもすべてのコードに興味がある場合は、私の回答を編集してここに入力してください。私は誰もこの答えを参照する可能性は低いと思われたときに、その作業を行う余分な作業をしたくなかった。

関連する問題