i was using this nant task for my nunit tests.
<nunit2 failonerror="false">
<formatter usefile="true"
outputdir="build"
type="Xml"
extension=".xml"/>
<test>
<assemblies>
<include name="Build/*.Tests.dll"/>
</assemblies>
<references >
<include name="Tools/**/*.dll"/>
<include name="Build/*.dll"/>
</references>
</test>
</nunit2>
It had the nice benefit that I could use it in multiple projects without changing anything. The problem is that it seems to be ignoring the TestCase and ExpectectException attributes on some of my tests causing them to fail. I've seen the suggestion to use the exec task to call nunit-console.exe, but then I have to specify all of the test dll's individually. Which means I can no longer use it in all of my projects without having to edit it. I'd all so have to edit it any time I add a test project to one of my solutions.
Is there any way to get the best of both worlds?
You can use <foreach> to run your tests:
<foreach item="File" property="test-assembly">
<in>
<items>
<include name="${binaries-dir}/*" />
</items>
</in>
<do>
<exec program="${nunit.exe}" workingdir="${binaries-dir}"
managed="true">
<arg value="/nologo" />
<arg value="${test-assembly}" />
</exec>
</do>
</foreach>
Related
When I want to compile my GTW project I got this output in my console:
ant -f "C:\\Users\\Donatas\\Desktop\\b2b\\servlet" "-Dbrowser.context=C:\\Users\\Donatas\\Desktop\\b2b\\servlet" -DforceRedeploy=false -Ddirectory.deployment.supported=true -Dnb.internal.action.name=run run
init:
deps-module-jar:
deps-ear-jar:
deps-jar:
wsimport-init:
wsimport-client-ic:
files are up to date
wsimport-client-generate:
library-inclusion-in-archive:
library-inclusion-in-manifest:
compile:
compile-jsps:
GWT4NB https://github.com/gwt4nb/gwt4nb
GWT installation directory: C:\Users\Donatas\Desktop\b2b\lib\gwt-2.7.0
init:
do-gwt-compile-15:
GWT Compiling client-side code.
Error: Could not find or load main class com.google.gwt.dev.GWTCompiler
C:\Users\Donatas\Desktop\b2b\servlet\nbproject\build-gwt.xml:326: The following error occurred while executing this line:
C:\Users\Donatas\Desktop\b2b\servlet\nbproject\build-gwt.xml:356: Java returned: 1
My build-gtw.xml 326 line is:
<target name="-pre-dist" depends="-gwt-define-compile-unneeded">
<antcall target="-gwt-print-dir"/>
326: <antcall target="do-gwt-compile-15" />
<antcall target="do-gwt-compile-16" />
<antcall target="do-gwt-compile-17" />
<antcall target="do-gwt-compile-20" />
<antcall target="do-gwt-compile-23" />
<antcall target="do-gwt-compile-25" />
</target>
My build-gtw.xml 356 line is:
<target name="do-gwt-compile-15" if="gwt.version.15"
unless="gwt.compile.unneeded" depends="-init-gwt-dir">
<!-- You can override this property in the 'gwt.properties' file -->
<property name="gwt.compiler.output.style" value="OBFUSCATED"/>
<property name="gwt.compiler.logLevel" value="WARN"/>
<echo>GWT Compiling client-side code.</echo>
<java failonerror="true"
classname="com.google.gwt.dev.GWTCompiler" fork="true"
line 356: jvmargs="${gwt.compiler.jvmargs}">
<classpath>
<!--
GWT libraries are mentioned here explicitly so they are always
at the front of the class path.
-->
<pathelement path="${gwt.dir}/gwt-user.jar"/>
<fileset dir="${gwt.dir}">
<include name="gwt-dev-*.jar"/>
</fileset>
<pathelement path="${gwt.dir}/gwt-servlet.jar"/>
<pathelement path="${javac.classpath}"/>
<pathelement path="${src.dir}"/>
<pathelement path="${build.classes.dir}"/>
</classpath>
<arg value="-out"/>
<arg path="${build.web.dir}/"/>
<arg value="-style"/>
<arg value="${gwt.compiler.output.style}"/>
<arg value="-logLevel"/>
<arg value="${gwt.compiler.logLevel}"/>
<arg line="${gwt.compiler.args}"/>
<arg line="${gwt.module}"/>
</java>
<property name="gwt.output.dir" value="${gwt.module}"/>
<move todir="${build.web.dir}/${gwt.output.dir}">
<fileset dir="${build.web.dir}/${gwt.module}"/>
</move>
<touch file="${build.dir}/gwtc.run"/>
</target>
I know that GWTCompiler is deprecated, but how to change it if I change in Compiler I got error that my console arguments like [-out] is not recognized. So how to compile it. I'm using GTW 2.7 version.
It looks like a bug in GWT4NB. It should invoke do-gwt-compile-25 for GWT 2.7, not do-gwt-compile-15.
Try manually updating build-gwt.xml to add a 2.7 case to gwt.version.25: https://github.com/ksfreitas/gwt4nb/blob/1001c4fa8e9f6c0fed3c79ba19320b315737357f/trunk/src/org/netbeans/modules/gwt4nb/resources/build-gwt.xml#L139-L147
But it might not work, due to another bug (issue still open, don't know if it's been fixed or not, I don't use Netbeans): https://github.com/ksfreitas/gwt4nb/issues/32 (a quick grep in the code seems to indicate you could define gwt.version=2.6 or gwt.version=2.7 in nbproject/gwt.properties of your project, not sure if it'll work or be overwritten by the Netbeans plugin)
The compiler hasn't been called GWTCompiler since GWT 1.7 or so. Use com.google.gwt.dev.Compiler as the classname instead.
<!--
Check for GWT 2.5
-->
<condition property="gwt.version.25" value="true">
<or>
<equals arg1="${gwt.version}" arg2="2.5"/>
<equals arg1="${gwt.version}" arg2="2.6"/>
<equals arg1="${gwt.version}" arg2="2.7"/> --> add this line
</or>
</condition>
I added version 2.7 on build-gwt.xml and it works for me :D
Open build-gwt.xml
Then,
Try removing:
<antcall target="do-gwt-compile-15" />
Run, This should work
Ant search in text file some text expression, if it NOT found I try to delete file that txt was. So my code in Ant is down, but I don't know how put NOT correctly
<target name="ifDelete">
<if>
<length when="greater" length="0">
<fileset file="MyText.txt">
<!--containsregexp negate="true"-->
<containsregexp expression="findME" />
<!--/containsregexp-->
</fileset>
</length>
<then>
<delete includeemptydirs="true">
<fileset dir="FileIgonnaDelete">
</fileset>
</delete>
</then>
</if>
</target>
To search and delete - means seek and destroy - files in a fileset that do not contain a specific text, use something like :
<delete verbose="true">
<fileset dir="rootdir/to/search" includes="**/*.txt">
<not>
<contains text="findMe"/>
</not>
</fileset>
</delete>
you may use one or more nested resource collections (fileset, dirset ...) within delete.
see Ant manual delete, fileset and selectors for details.
Theres about 20 diff ant files, that make up the build. Im not sure how to configure run-jetty-runs eclipse plugin to use this information. Can anyone point me towards a tutorial or some documentation:
<target name="run-jetty" depends="build" description="Runs application in included Jetty container">
<property file="credentials.properties" />
<property name="jetty.port" value="8080" />
<java jar="${jetty.dir}/start.jar" fork="true" dir="${basedir}" maxmemory="512M">
<arg value="${jetty.conf.dir}/jetty.xml" />
<arg value="${jetty.conf.dir}/jetty-jndi.xml" />
<sysproperty key="jetty.port" value="${jetty.port}" />
<jvmarg value="-XX:MaxPermSize=128m" />
<jvmarg value="-Dfile.encoding=UTF-8" />
<jvmarg value="-Djetty.home=${jetty.dir}" />
<jvmarg value="-Djetty.datasource.lanter.username=${jetty.datasource.lanter.username}" />
<jvmarg value="-Djetty.datasource.lanter.password=${jetty.datasource.lanter.password}" />
<jvmarg value="-Djetty.datasource.vs.username=${jetty.datasource.us.username}" />
<jvmarg value="-Djetty.datasource.vs.password=${jetty.datasource.us.password}" />
<jvmarg value="-DSTOP.PORT=${jetty.stop.port}" />
<jvmarg value="-DSTOP.KEY=${jetty.stop.key}" />
</java>
</target>
You have two options:
Start the app using the run-jetty-run plugin; this will give you an entry in the debug menu which means that Jetty (and the app) will be launched in the debugger if you select it.
Use the information in the code block above to create your own run configuration. The classpath should already be correct; you just need to select the correct main class (open META-INF/MANIFEST.MF in start.jar to find that out). Replace all the properties with their values and put each into a new line into the argument text fields of the run configuration.
On the tab "Common", you can set a file name and save the launch config as a file in your project, so everyone working on it will get it.
I got ant script running fine inside Eclipse
Here is a piece of it :
<p2.composite.repository failOnExists="true">
<repository location="file:/${basedir}/compRepo" name="Repository description goes here" />
<add>
<repository location="http://url/Eclipse/repo/Galileo-3.5.1/" />
<repository location="http://another-url/Java/repo/4.0/" />
<repository location="${diag.location}" />
</add>
</p2.composite.repository>
But I would like Hudson CI server to be able to run it, but, no matter all the jars I put in ANT_HOME/lib I can't get this task to run in a simple command line ant...
I got stuck with this error :
C:\workspaces\workspace\project\junit.script\createCompRepo.xml:10: Problem: failed to create task or type p2.composite.repository
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
Where are defined the p2 ant tasks ? Is there a way to run them outside Eclipse ?
Thank you very much for you help !
Anthony
By reading this thread and the P2 Publisher documentation, it should be in org.eclipse.equinox.launcher_*.jar
Example of a P2 task (not an ant task here) just for the -jar argument:
java -jar <targetProductFolder>/plugins/org.eclipse.equinox.launcher_*.jar
-application org.eclipse.equinox.p2.publisher.UpdateSitePublisher
-metadataRepository file:/<some location>/repository
-artifactRepository file:/<some location>/repository
-source /<location with a site.xml>
-configs gtk.linux.x86
-compress
-publishArtifacts
The P2 Ant tasks are described here, and in the Eclipse help.
The OP Anthony43 adds in the comments:
I just want to run an an ant target with p2 taskdefs, outside of eclipse.
I found out that I should use antRunner, using such a command line :
./eclipse -vm /opt/sun-java2-6.0/bin/java -nosplash \
-data ${java.io.tmpdir}/workspace -consolelog \
-application org.eclipse.ant.core.antRunner \
-f /path/to/scripts/partialMirrorFromRepo.xml
But Andrew Niefer (Eclipse committer on PDE/Build, p2, & Equinox Framework) adds:
The p2 tasks need to be run inside an osgi environment and won't work in a normal ant run.
That is why you need to use the org.eclipse.ant.core.antRunner application.
Starting with "java -jar launcher.jar" is just an alternate method to invoking the eclipse executable.
martin jakubik mentions:
I would have liked to see a command that I could cut&paste and that put everything together.
What I used was:
java -jar <eclipse-install-directory>\eclipse\plugins\org.eclipse.equinox.launcher_*.jar -application org.eclipse.ant.core.antRunner.
Note that I could not figure out what <targetProductFolder> was, so I used <eclipse-install...> instead.
I created a small Ant macro for that exact purpose
<path id="equinox.launcher.path">
<fileset dir="${eclipse.home}/plugins">
<include name="org.eclipse.equinox.launcher_*.jar" />
</fileset>
</path>
<macrodef name="antRunner">
<!-- Ant script location -->
<attribute name="antFile" />
<!-- the arguments for the script that is executed -->
<attribute name="args" default=""/>
<sequential>
<java
classname="org.eclipse.equinox.launcher.Main"
fork="true"
failonerror="true">
<arg line="-application org.eclipse.ant.core.antRunner" />
<arg line="-f #{antFile}" />
<arg line="#{args}"/>
<classpath refid="equinox.launcher.path" />
</java>
</sequential>
</macrodef>
All the p2 tasks NEED the eclipse runtime (as explicitly stated in the eclipse help mentioned above), so you definitely need to use eclipse.
The only way to get round of it would be to analyze the eclipse code, extract what is needed and create your own build system with it.
Just to complete the example of Jarek Przygódzki here is my solution, using his ant-file. I'm not well versed in using ant, so there might be potential for optimisation.
This aproach is used headless on a server without GUI, nevertheless I had to install eclipse. Installation with apt-get wasn't working, so it's better to install manual (download and untar).
First antfile assembles names, versions, etc...
Second antfile is called from first antfile and creates composite repositories.
First antfile:
<project name="project">
<!-- ....do some other stuff...-->
<target name="p2.composite.add">
<!--Call macro for child repo-->
<antRunner
name="${site.composite.name}"
location="${composite.repository.directory}"
child="${child.repository}"
/>
<!--Call macro for main repo-->
<antRunner
name="${main.site.composite.name}"
location="${main.composite.repository.directory}"
child="${majorMinorVersion}"
/>
</target>
<!--Eclipse installation path-->
<path id="equinox.launcher.path">
<fileset dir="/usr/share/eclipse/plugins">
<include name="org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar" />
</fileset>
</path>
<macrodef name="antRunner">
<attribute name="name"/>
<attribute name="location"/>
<attribute name="child"/>
<sequential>
<java
classname="org.eclipse.equinox.launcher.Main"
fork="true"
failonerror="true">
<arg line="-application org.eclipse.ant.core.antRunner" />
<arg line="-f addCompositeInternal.ant run" />
<arg line="-Dcomposite.name=#{name}"/>
<arg line="-Dcomposite.location=#{location}"/>
<arg line="-Dcomposite.child=#{child}"/>
<classpath refid="equinox.launcher.path" />
</java>
</sequential>
</macrodef>
</project>
Second Antfile, named addCompositeInternal.ant
<project name="composite">
<target name="run">
<add.composite.repository.internal
composite.repository.location="${composite.location}"
composite.repository.name="${composite.name}"
composite.repository.child="${composite.child}"
/>
</target>
<!-- = = = = = = = = = = = = = = = = =
macrodef: add.composite.repository.internal
= = = = = = = = = = = = = = = = = -->
<macrodef name="add.composite.repository.internal">
<attribute name="composite.repository.location" />
<attribute name="composite.repository.name" />
<attribute name="composite.repository.child" />
<sequential>
<echo message=" " />
<echo message="Composite repository : #{composite.repository.location}" />
<echo message="Composite name : #{composite.repository.name}" />
<echo message="Adding child repository : #{composite.repository.child}" />
<p2.composite.repository>
<repository compressed="false" location="#{composite.repository.location}" name="#{composite.repository.name}" />
<add>
<repository location="#{composite.repository.child}" />
</add>
</p2.composite.repository>
<echo file="#{composite.repository.location}/p2.index">version=1
metadata.repository.factory.order=compositeContent.xml,\!
artifact.repository.factory.order=compositeArtifacts.xml,\!
</echo>
</sequential>
</macrodef>
</project>
I would like to create a target that cleans log files older than 7 days old in a specific folder. I get an error when I try to put in a "date" element inside a fileset. How can I go about this?
<delete>
fileset basedir="${StageIISRoot}/MySite/App_Data/ErrorLog">
<date datetime="${datetime::now() - timespan::from-days(7)}" when="before"/>
<include name="*.xml" />
</fileset>
</delete>
I don't see any documentation for using the "date" element. You might consider something like this:
<fileset id="thelogs" basedir="${StageIISRoot}/MySite/App_Data/ErrorLog">
<include name="*.xml" />
</fileset>
And then reference that fileset later in a loop that checks the file date and deletes:
<foreach item="File" property="filename">
<in>
<items refid="thelogs" />
</in>
<do>
<if test="${timespan::get-days(datetime::now() - file::get-last-write-time(filename)) >= 7}">
<delete file="${filename}" />
</if>
</do>
</foreach>
What about something like:
<tstamp>
<format property="last.week" pattern="MM/dd/yyyy hh:mm" locale="en,UK" offset="-7" unit="day"/>
</tstamp>
<echo>Delete backups before ${last.week}</echo>
<delete>
<fileset dir="${dst.dir}">
<date datetime="${last.week}" when="before"/>
</fileset>
</delete>
It seems to work for me :-)