From: Ray K. <ra...@ga...> - 2009-07-28 23:33:18
|
Hello - So, some things became clearer after I started at some of this enough. I have to say that some of the ant functionality is very creatively obfuscated. And judging from comments I have seen, I am not the only one who thinks so.... Anyway, I have something working. I added a "build" target to the top-level build.xml file, because IMHO things that work in all the other build.xml files should work in this one also. I also added a new "buildtests" target in the top-level build.xml file. I was tempted to use "buildTests", but nothing else in camel-case, so I left it. This target is parallel to the new "build" target. They both depend on "frameworks,applications,examples". The "buildtests" target calls these with "include.tests" set to "true". The "include.tests" property has the following salutary effects. First, if a "Tests" directory appears in the top-level directory of a project, then its java sources are compiled and built into the jar file. Second, the "Tests/ERXTest" application is built. Is someone using this? I am not making any changes to the ERXTest project, so if it had issues, it still has them. I cannot run it as I do not use FrontBase, but I may try to make it work cross-adaptor. Later. Third, there is no step 3! And if one calls the build targets without the "include.tests" property set, then the things that used to happen will still happen. And can I make a request of the WOLips committers that the following diff to WOCompile.java, or something like that diff, be applied to that project? Getting the conditional building to work would have been a _lot_ easier if the "if" attribute was allowed on <wocompile>. It occurs to me that the "if" attribute may be useful on some of the other tasks as well. I mean, if it makes the build.xml files easier to read and simpler in structure, how can it be bad? Note, I did not actually test this WOCompile.java, but it looks pretty darn obvious. I will wait a while to hear objections to my suggested edits. Full diffs, and the three files as I have changed them, are below. The non-"include.tests" stuff is just meant to be white-space changes. cheers - ray % svn diff woproject/woproject-ant-tasks/src/java/org/objectstyle/ woproject/ant/WOCompile.java Index: woproject/woproject-ant-tasks/src/java/org/objectstyle/ woproject/ant/WOCompile.java =================================================================== --- woproject/woproject-ant-tasks/src/java/org/objectstyle/woproject/ ant/WOCompile.java (revision 5693) +++ woproject/woproject-ant-tasks/src/java/org/objectstyle/woproject/ ant/WOCompile.java (working copy) @@ -84,12 +84,20 @@ this.dumpClasspath = dumpClasspath; } + private String ifProperty; + + public void setIf(String ifProperty) { + this.ifProperty = ifProperty; + } + @Override public void execute() throws BuildException { - setClasspath(FrameworkSet.jarsPathForFrameworkSets(getProject(), frameworkSets, new WOEnvironment(getProject().getProperties()).getWOVariables())); - if (dumpClasspath != null) { - getProject().setProperty(dumpClasspath, getClasspath().toString()); + if ((ifProperty != null) && (getProject().getProperty(ifProperty) != null)) { + setClasspath(FrameworkSet.jarsPathForFrameworkSets(getProject(), frameworkSets, new WOEnvironment(getProject().getProperties()).getWOVariables())); + if (dumpClasspath != null) { + getProject().setProperty(dumpClasspath, getClasspath().toString()); + } + super.execute(); } - super.execute(); } } % svn diff Wonder/build.xml Index: Wonder/build.xml =================================================================== --- Wonder/build.xml (revision 9641) +++ Wonder/build.xml (working copy) @@ -8,6 +8,20 @@ <ant antFile="Build/build/build.xml" target="clean" /> </target> + <target name="build" depends="frameworks,applications,examples" /> + + <target name="buildtests" depends="frameworks,applications,examples"> + <ant target="frameworks"> + <property name="include.tests" value="true" /> + </ant> + <ant target="applications"> + <property name="include.tests" value="true" /> + </ant> + <ant target="examples"> + <property name="include.tests" value="true" /> + </ant> + </target> + <target name="frameworks"> <ant antFile="Build/build/build.xml" target="frameworks.all"> <property name="build.action" value="build" /> @@ -98,4 +112,4 @@ <target name="all" depends="clean, frameworks, frameworks.install, applications, applications.install, examples, examples.install"> </target> -</project> \ No newline at end of file +</project> % svn diff Wonder/Build/build/generic.xml Index: Wonder/Build/build/generic.xml =================================================================== --- Wonder/Build/build/generic.xml (revision 9641) +++ Wonder/Build/build/generic.xml (working copy) @@ -164,6 +164,7 @@ <property name="web.application.install.root" value="$ {wo.server.root}" /> <!-- just some existing value --> <property name="project.sources.dir" value="${project.dir}/ Sources" /> + <property name="project.tests.dir" value="${project.dir}/ Tests" /> <property name="patches.dir" value="${wonder.root}/Build/ build" /> <property name="classes.exclude.0" value="does_not_exists_hopefully" /> <property name="classes.exclude.1" value="does_not_exists_hopefully" /> @@ -255,14 +256,23 @@ </copy> </target> + <!-- notes: + - We may want to use <compilerarg value="-Xlint:unchecked" / > inside the <wocompile>. It was here, but commented out. + --> <target name="global.compile" depends="global.environment,global.prepare"> - <taskdef name="wocompile" classname="org.objectstyle.woproject.ant.WOCompile"> + <taskdef name="wocompile" classname="org.objectstyle.woproject.ant.WOCompile"> <classpath refid="ant.classpath"/> </taskdef> - + + <condition property="tests.dir" value="${project.tests.dir}" else="${project.sources.dir}"> + <and> + <available file="${project.tests.dir}" /> + <istrue value="${include.tests}" /> + </and> + </condition> + <antcall target="${before.compile}" /> <wocompile srcdir="${project.sources.dir}" destdir="$ {build.classes}" debug="on" optimize="off" deprecation="off" source="$ {compiler.source}" target="${compiler.target}" > - <!--compilerarg value="-Xlint:unchecked" /--> <exclude name="${classes.exclude.0}" /> <exclude name="${classes.exclude.1}" /> <exclude name="${classes.exclude.2}" /> @@ -277,6 +287,30 @@ <frameworks root="Local" if="wo.local.root.bundles" bundles="${wo.local.root.bundles}" embed="$ {wo.local.root.bundles.embed}" dir="${wo.local.root}"/> <frameworks root="System" if="wo.system.root.bundles" bundles="${wo.system.root.bundles}" embed="$ {wo.system.root.bundles.embed}" dir="${wo.system.frameworks}"/> </wocompile> + + <!-- If include.tests is not set or there is no test directory, this needs to be a no-op. + Why is there no if attribute allowed on wocompile? Why is a <condition> not allowed in a <wocompile>? -rrk + --> + + <wocompile srcdir="${tests.dir}" destdir="${build.classes}" debug="on" optimize="off" deprecation="off" source="$ {compiler.source}" target="${compiler.target}" > + + <exclude name="${classes.exclude.0}" /> + <exclude name="${classes.exclude.1}" /> + <exclude name="${classes.exclude.2}" /> + + <classpath> + <fileset dir="${project.dir}/Libraries"> + <include name="**/*.jar" /> + <!-- ak: i know, fix this...--> + </fileset> + </classpath> + + <!-- ak: must NOT be a copy of WOApp, as deploymentDir doesn't work here --> + <frameworks root="External" if="wo.external.root.bundles" bundles="${wo.external.root.bundles}" embed="$ {wo.external.root.bundles.embed}" dir="${wo.external.root}" /> + <frameworks root="Local" if="wo.local.root.bundles" bundles="${wo.local.root.bundles}" embed="$ {wo.local.root.bundles.embed}" dir="${wo.local.root}"/> + <frameworks root="System" if="wo.system.root.bundles" bundles="${wo.system.root.bundles}" embed="$ {wo.system.root.bundles.embed}" dir="${wo.system.frameworks}"/> + </wocompile> + <antcall target="${after.compile}" /> </target> @@ -289,6 +323,7 @@ </target> <target name="global.framework.build" depends="global.properties,global.compile,global.unjar"> + <mkdir dir="${build.framework.dir}" /> <taskdef name="woframework" classname="org.objectstyle.woproject.ant.WOFramework"> <classpath refid="ant.classpath"/> @@ -381,10 +416,26 @@ </wsresources> <!-- this should be an exact copy of the frameworks in the woapplication task --> - <frameworks root="External" dir="${wo.external.root}" if="wo.external.root.bundles" bundles="${wo.external.root.bundles}" embed="${wo.external.root.bundles.embed}" deploymentDir="$ {wonder.local.deployment.dir}"/> - <frameworks root="Local" if="wo.local.root.bundles" bundles="${wo.local.root.bundles}" embed="$ {wo.local.root.bundles.embed}" deploymentDir="$ {wonder.local.deployment.dir}"/> - <frameworks root="System" if="wo.system.root.bundles" bundles="${wo.system.root.bundles}" embed="$ {wo.system.root.bundles.embed}" deploymentDir="$ {wonder.system.deployment.dir}"/> + <frameworks root="External" + dir="${wo.external.root}" + if="wo.external.root.bundles" + bundles="${wo.external.root.bundles}" + embed="${wo.external.root.bundles.embed}" + deploymentDir="${wonder.local.deployment.dir}"/> + + <frameworks root="Local" + if="wo.local.root.bundles" + bundles="${wo.local.root.bundles}" + embed="${wo.local.root.bundles.embed}" + deploymentDir="${wonder.local.deployment.dir}"/> + + <frameworks root="System" + if="wo.system.root.bundles" + bundles="${wo.system.root.bundles}" + embed="${wo.system.root.bundles.embed}" + deploymentDir="$ {wonder.system.deployment.dir}"/> </woapplication> + <exec dir="${build.root}/${project.name}.woa" executable="/ bin/chmod" os="Mac OS X"> <arg line="a+rx ${project.name}" /> </exec> % svn diff Wonder/Build/build/build.xml Index: Wonder/Build/build/build.xml =================================================================== --- Wonder/Build/build/build.xml (revision 9641) +++ Wonder/Build/build/build.xml (working copy) @@ -14,7 +14,8 @@ <property name="frameworks.wonder.core" value="$ {frameworks.wonder.jars}/ERExtensions/JavaWOExtensions" /> <property name="frameworks.wonder.d2w" value="$ {frameworks.wonder.core}/ERDirectToWeb" /> <property name="frameworks.wonder.logic" value="$ {frameworks.wonder.d2w}/ERPrototypes/ERCoreBusinessLogic" /> - <property name="frameworks.system.core" value="JavaFoundation/ JavaEOAccess/JavaEOControl/JavaWebObjects/JavaWOJSPServlet/ JavaJDBCAdaptor/JavaXML/JavaDirectToWeb/JavaEOProject/ JavaDTWGeneration" /> + <property name="frameworks.system.core" + value="JavaFoundation/JavaEOAccess/JavaEOControl/ JavaWebObjects/JavaWOJSPServlet/JavaJDBCAdaptor/JavaXML/ JavaDirectToWeb/JavaEOProject/JavaDTWGeneration" /> <property name="frameworks.system.d2w" value="$ {frameworks.system.core}/JavaDirectToWeb/JavaEOProject/ JavaDTWGeneration" /> <target name="ERJars.all"> @@ -105,23 +106,23 @@ </antcall> </target> - <target name="ERIUI.all"> - <antcall target="global.framework.${build.action}" > - <param name="project.principal.class" value="er.iui.ERIUI" /> - <param name="project.name" value="ERIUI" /> - <param name="project.dir" value="Frameworks/Ajax/ERIUI" /> - <param name="wo.external.root.bundles" value="$ {frameworks.wonder.core}/Ajax" /> - </antcall> - </target> + <target name="ERIUI.all"> + <antcall target="global.framework.${build.action}" > + <param name="project.principal.class" value="er.iui.ERIUI" /> + <param name="project.name" value="ERIUI" /> + <param name="project.dir" value="Frameworks/Ajax/ERIUI" /> + <param name="wo.external.root.bundles" value="$ {frameworks.wonder.core}/Ajax" /> + </antcall> + </target> - <target name="GoogleChart.all"> - <antcall target="global.framework.${build.action}" > - <param name="project.principal.class" value="er.googlechart.GCGoogleChart" /> - <param name="project.name" value="GoogleChart" /> - <param name="project.dir" value="Frameworks/Ajax/ GoogleChart" /> - <param name="wo.external.root.bundles" value="$ {frameworks.wonder.core}/Ajax" /> - </antcall> - </target> + <target name="GoogleChart.all"> + <antcall target="global.framework.${build.action}" > + <param name="project.principal.class" value="er.googlechart.GCGoogleChart" /> + <param name="project.name" value="GoogleChart" /> + <param name="project.dir" value="Frameworks/Ajax/ GoogleChart" /> + <param name="wo.external.root.bundles" value="$ {frameworks.wonder.core}/Ajax" /> + </antcall> + </target> <target name="EROpenID.all"> <antcall target="global.framework.${build.action}" > @@ -238,6 +239,16 @@ </antcall> </target> + <target name="ERXTest.all" if="${include.tests}"> + <antcall target="global.application.${build.action}" > + <param name="project.type" value="application" /> + <param name="project.principal.class" value="er.erxtest.Application" /> + <param name="project.name" value="ERXTest" /> + <param name="project.dir" value="Tests/ERXTest" /> + <param name="wo.external.root.bundles" value="$ {frameworks.wonder.core}" /> + </antcall> + </target> + <target name="ERIndexingExample.all"> <antcall target="global.application.${build.action}" > <param name="project.principal.class" value="" /> @@ -592,6 +603,7 @@ <param name="wo.external.root.bundles" value="$ {frameworks.wonder.core}/Ajax/YUI" /> </antcall> </target> + <target name="YUI.all"> <antcall target="global.framework.${build.action}" > <param name="project.type" value="framework" /> @@ -665,7 +677,7 @@ </antcall> </target> - <target name="ERDivaLookExample.all"> + <target name="ERDivaLookExample.all"> <antcall target="global.application.${build.action}" > <param name="project.type" value="application" /> <param name="project.principal.class" value="Application" /> @@ -738,6 +750,7 @@ <param name="wo.external.root.bundles" value="$ {frameworks.wonder.core}" /> </antcall> </target> + <target name="PostgresqlPlugIn.all"> <antcall target="global.framework.${build.action}" > <param name="project.principal.class" value="com.webobjects.jdbcadaptor.PostgresqlPlugIn" /> @@ -814,7 +827,7 @@ <target name="common.frameworks.all" depends="ERJars.all, JavaWOExtensions.all, ERExtensions.all, ERDirectToWeb.all, ERNeutralLook.all, ERSelenium.all, WOOgnl.all, ERPrototypes.all, ERPlot.all, ERIndexing.all, ERChronic.all, ERCaching.all, ERCaptcha.all, EROpenID.all, ERPDFGeneration.all, ERJGroupsSynchronizer.all, ERRest.all, ERAttachment.all, ERTaggable.all, ERJavaMail.all, ERCoreBusinessLogic.all, ERChangeNotificationJMS.all, ERCalendar.all, ERExcelLook.all, ERWorkerChannel.all, BTBusinessLogic.all, JavaMemoryAdaptor.all, JavaRESTAdaptor.all, JavaFSAdaptor.all, WOLips.all, WOJavaRebel.all, ERMoviesLogic.all" /> - <target name="common.applications.all" depends="BugTracker.all, ERMailer.all, TickTockMan.all" /> + <target name="common.applications.all" depends="BugTracker.all, ERMailer.all, TickTockMan.all, ERXTest.all" /> <target name="common.examples.all" depends="ERSeleniumExample.all, ERIndexingExample.all, ERMovies.all, D2WComponentTour.all, AjaxExample.all, AjaxExample2.all, YUIExample.all, SproutCoreExample.all, EROpenIDExample.all, JavaRESTAdaptorExample.all" /> |
From: Ray K. <ra...@ga...> - 2009-07-29 04:39:31
|
> <snip> > And can I make a request of the WOLips committers that the following > diff to WOCompile.java, or something like that diff, be applied to > that project? Getting the conditional building to work would have > been a _lot_ easier if the "if" attribute was allowed on > <wocompile>. It occurs to me that the "if" attribute may be useful > on some of the other tasks as well. I mean, if it makes the > build.xml files easier to read and simpler in structure, how can it > be bad? Note, I did not actually test this WOCompile.java, but it > looks pretty darn obvious. > And of course, since I did not test this, there is an error in it. Corrected suggestion is below. cheers - ray % svn diff woproject/woproject-ant-tasks/src/java/org/objectstyle/ woproject/ant/WOCompile.java Index: woproject/woproject-ant-tasks/src/java/org/objectstyle/ woproject/ant/WOCompile.java =================================================================== --- woproject/woproject-ant-tasks/src/java/org/objectstyle/woproject/ ant/WOCompile.java (revision 5693) +++ woproject/woproject-ant-tasks/src/java/org/objectstyle/woproject/ ant/WOCompile.java (working copy) @@ -84,12 +84,20 @@ this.dumpClasspath = dumpClasspath; } + private String ifProperty; + + public void setIf(String ifProperty) { + this.ifProperty = ifProperty; + } + @Override public void execute() throws BuildException { - setClasspath(FrameworkSet.jarsPathForFrameworkSets(getProject(), frameworkSets, new WOEnvironment(getProject().getProperties()).getWOVariables())); - if (dumpClasspath != null) { - getProject().setProperty(dumpClasspath, getClasspath().toString()); + if ((ifProperty == null) || (getProject().getProperty(ifProperty) != null)) { + setClasspath(FrameworkSet.jarsPathForFrameworkSets(getProject(), frameworkSets, new WOEnvironment(getProject().getProperties()).getWOVariables())); + if (dumpClasspath != null) { + getProject().setProperty(dumpClasspath, getClasspath().toString()); + } + super.execute(); } - super.execute(); } } |