2017-06-21 200 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命令来读取我所有的变量。

这是一个相当长的解决方法,但我终于得到了一切,因为我想它。

如果将来有人对所有的代码感兴趣,我会很乐意编辑我的答案并将其放在这里。我不想经历这样做的额外工作,因为似乎不太可能有人会提及这个答案。

相关问题