2017-06-21 198 views
0

我有幾個不同的NetBeans項目鏈接在一起。我有一個MainProject,鏈接SubProject作爲編譯時庫。未在NetBeans build.xml文件中設置Ant變量的子項目

我試圖修改Ant build.xml腳本MainProject來設置一個新的Ant變量。我可以在MainProject中正確設置並查看此變量,但SubProject的Ant build.xml腳本沒有看到此變量。

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> 

build.xml腳本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> 

現在,當我在MainProject我得到以下輸出運行clean and build

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) 

如何獲得SubProject以查看${test.test.test}變量的狀態,因爲它由MainProject設置?

編輯 - 我正在使用NetBeans自動生成ant爲我的項目構建腳本。 Netbeans創建一個build-impl.xml和一個build.xml。當您調用ant進程時,它會調用build-impl.xml中的目標。然後build-impl.xml將在build.xml中調用我的自定義代碼。例如,在NetBeans IDE中運行clean and build將調用build-impl.xml中的相應目標,並且build-impl.xml將依次調用我在build.xml中的自定義代碼。我可以發佈build-impl.xml腳本,但它們只是由Netbeans IDE生成的標準腳本。

+0

我在Main和sub中看到'-pre-init'目標。任何原因? – Rao

+0

如何調用子項目的目標?可以發佈可重複的構建腳本?另外檢查你是否可以使用subant - 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腳本後,我能夠找出答案。

我發現.build-impl.xmlMainProject用於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一組有限的領域。其中一個字段${built-jar.properties}是一個ant屬性文件的路徑。我創建了一個新的屬性文件,位於${built-jar.properties}文件的位置旁邊。在新的屬性文件中,我放置了所有需要存儲的螞蟻變量。現在,在SubProject我創建了一個指向新文件的變量。這涉及在${built-jar.properties}文件上使用dirname命令來獲取目錄。然後我調用了一個loadproperties ant命令來讀取我所有的變量。

這是一個相當長的解決方法,但我終於得到了一切,因爲我想它。

如果將來有人對所有的代碼感興趣,我會很樂意編輯我的答案並將其放在這裏。我不想經歷這樣做的額外工作,因爲似乎不太可能有人會提及這個答案。

相關問題