Eclipse with Java EE (EJB), ANT and Jenkins / Hudson - eclipse

My Goal is to get a Enterprise Java Application to be built on Jenkins. The Application consists of 4 Projects (Client-Interfaces, Webapplcation (incl. Faces), EJB Application (incl. JPA), EAR-Container-Project).
When Eclipse deploys this projects to a glassfish server, it assembles the Webapplication (war-file), the Client-Interfaces (jar-file) and the EJB-Interfaces (jar-file) into one ear-File.
Now, if I want to use continous integration I need to achieve the same on the CI-Server jenkins.
My first idea was to solve this with ant, so I used the Export-Function of Eclipse and generated build-Files for the projects.
The Problem is that the generated Build-Files refer to the Java EE Libraries (such as Glassfish-Runtime, JPA-Library, etc) which are outside of the project directory. There are about 30 libraries.
This implies that I cannot use the file on jenkins, because this libraries are missing. Of course I can copy these, but I don't think this is how it should be done.
So, what is the best way to get the Java EE Enterprise Application to be built on the CI Server? Do I have to write the ANT-Script all by myself and copy the libraries into the project? Or am I Missing something obvious?

Since I did not found anything that suited for me, I wrote an ant script that covered my needs on my own.
Here is my solution if this helps anyone in the future:
`
<project basedir="." default="build" name="Project">
<available property="glassfishdir" value="/opt/glassfish3/glassfish/modules"
file="/opt/glassfish3/glassfish/modules" type="dir" />
<!-- ########### Property Declarations ################################################################################################################### -->
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.6"/>
<property name="source" value="1.6"/>
<property name="builddir" value="build" />
<property name="outputartifacts" value="out" />
<property name="web.name" value="ProjectWeb" />
<property name="web.projectpath" value="ProjectWeb"/>
<property name="web.src" value="${web.projectpath}/src" />
<property name="web.builddir" value="${builddir}/web" />
<property name="web.builddir.classes" value="${web.builddir}/WEB-INF/classes"/>
<property name="ejb.name" value="ProjectEJB" />
<property name="ejb.projectpath" value="ProjectEJB"/>
<property name="ejb.src" value="${ejb.projectpath}/src"/>
<property name="ejb.builddir" value="${builddir}/ejb" />
<property name="ejb.builddir.classes" value="${ejb.builddir}/classes" />
<property name="ejbclient.name" value="ProjectEJBClient" />
<property name="ejbclient.projectpath" value="ProjectEJBClient"/>
<property name="ejbclient.src" value="${ejbclient.projectpath}/src"/>
<property name="ejbclient.builddir" value="${builddir}/ejbclient" />
<property name="ejbclient.builddir.classes" value="${ejbclient.builddir}/classes"/>
<property name="ear.name" value="ProjectApplication" />
<property name="ear.dir" value="ProjectEAR" />
<!-- ########### Main Targets ################################################################################################################### -->
<target name="build" depends="create-ear">
</target>
<target name="clean-build">
<antcall target="clean" />
<antcall target="build" />
</target>
<target name="clean">
<delete dir="${builddir}"/>
<delete dir="${outputartifacts}"/>
</target>
<target name="init">
<mkdir dir="${outputartifacts}" />
</target>
<!-- ########### EJB App ################################################################################################################### -->
<target name="init-ejb" depends="init">
<mkdir dir="${ejb.builddir}" />
<copy includeemptydirs="false" todir="${ejb.builddir.classes}">
<fileset dir="${ejb.src}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="build-ejb" depends="init-ejb">
<javac debug="true" debuglevel="${debuglevel}" destdir="${ejb.builddir.classes}" includeantruntime="false" source="${source}" target="${target}">
<src path="${ejb.src}"/>
<classpath>
<fileset dir="${glassfishdir}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${outputartifacts}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
</target>
<!-- ########### WEB ################################################################################################################### -->
<target name="init-web" depends="init">
<mkdir dir="${web.builddir.classes}"/>
<copy includeemptydirs="false" todir="${web.builddir}">
<fileset dir="${web.projectpath}/WebContent">
</fileset>
</copy>
<copy includeemptydirs="false" todir="${web.builddir.classes}">
<fileset dir="${web.src}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target depends="init-web,create-ejb-client" name="build-web">
<javac debug="true" debuglevel="${debuglevel}" destdir="${web.builddir.classes}" includeantruntime="false" source="${source}" target="${target}">
<src path="${web.src}"/>
<classpath>
<fileset dir="${glassfishdir}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="out/">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
</target>
<!-- ############## EJB CLIENT ################################################################################################################ -->
<target name="init-ejb-client" depends="init">
<mkdir dir="${ejbclient.builddir}"/>
<copy includeemptydirs="false" todir="${ejbclient.builddir.classes}">
<fileset dir="${ejbclient.src}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target depends="init-ejb-client" name="build-ejb-client">
<javac debug="true" debuglevel="${debuglevel}" destdir="${ejbclient.builddir.classes}" includeantruntime="false" source="${source}" target="${target}">
<src path="${ejbclient.src}"/>
<classpath>
<fileset dir="${glassfishdir}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
</target>
<!-- ############ CREATE ARCHIVES################################################################################################################## -->
<target name="create-web" depends="build-web">
<war destfile="${outputartifacts}/${web.name}.war" basedir="${web.builddir}" webxml="${web.projectpath}/WebContent/WEB-INF/web.xml"/>
</target>
<target name="create-ejb-client" depends="build-ejb-client">
<jar destfile="${outputartifacts}/${ejbclient.name}.jar" basedir="${ejbclient.builddir.classes}" includes="**/*"/>
</target>
<target name="create-ejb" depends="build-ejb">
<jar destfile="${outputartifacts}/${ejb.name}.jar" basedir="${ejb.builddir.classes}" includes="**/*">
<manifest>
<attribute name="Class-Path" value="${ejbclient.name}.jar"/>
</manifest>
</jar>
</target>
<target name="create-ear" depends="create-ejb-client,create-web,create-ejb">
<ear destfile="${outputartifacts}/${ear.name}.ear" appxml="${ear.dir}/EarContent/META-INF/application.xml">
<fileset dir="${outputartifacts}" includes="*.jar,*.war"/>
</ear>
</target>
</project>
`

Use Maven.
Maven allow to define all dependencies in a single xml file (pom), dependencies which will be automatically downloaded from internet at compilation phase.
Maven come with a set of plugin to facilitate continuous integration like being able to start a container, run the test and close it automatically.
Maven integrate natively with jenkins.
Maven defines a complex lifecycle designed for this kind of problematic and allowing to compile, run unit test, package, run integration test and deploy with a single command triggered from jenkins;
Maven is definitively THE solution here.

You can also auto-create the build.xml in Eclipse using "Export... > General\Ant Buildfile" from the project context menu. This way the correct classpath is generated to your JAR's already available in the project.
Chances are that if there are dependencies between the projects, you only need to configure one build file to be run on Jenkins, as it will automatically call the build files from the other projects.

Related

Ant build.xml working Eclipse. Not working direct

My buildfile seems to be running correctly (and generating junit test reports) correctly when executing in Eclipse, however when I execute directly with: ant -buildfile C:\....\build.xml the files aren't produced - and the cmd output suggests it's not running the tests.
I have two eclipse projects. JUnitTest1 which is the code. JUnitTestUnitTests which contains the test code.
I've followed the instructions here to create my buildfile in eclipse (selecting only the test project) and can see the files drop into the junit directory.
When I run ant command directly, no files are generated and it doesn't look like it's running my tests.
Why aren't the changes made via the eclipse GUI reflected in the build.xml? I thought it was auto updated?
Here's the eclipse config
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- WARNING: Eclipse auto-generated file.
Any modifications will be overwritten.
To include a user specific buildfile here, simply create one in the same
directory with the processing instruction <?eclipse.ant.import?>
as the first entry and export the buildfile again. --><project basedir="." default="build" name="JUnitTest1UnitTests">
<property environment="env"/>
<property name="ECLIPSE_HOME" value="../../../../../tools/eclipse-mars/"/>
<property name="junit.output.dir" value="junit"/>
<property name="JUnitTest1.location" value="../JUnitTest1"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.7"/>
<property name="source" value="1.7"/>
<path id="JUnitTest1.classpath">
<pathelement location="${JUnitTest1.location}/bin"/>
<pathelement location="${JUnitTest1.location}/../../../../../tools/libs/hamcrest-core-1.3.jar"/>
<pathelement location="${JUnitTest1.location}/../../../../../tools/libs/junit-4.12.jar"/>
</path>
<path id="JUnitTest1UnitTests.classpath">
<pathelement location="bin"/>
<pathelement location="../../../../../tools/libs/hamcrest-core-1.3.jar"/>
<pathelement location="../../../../../tools/libs/junit-4.12.jar"/>
<path refid="JUnitTest1.classpath"/>
</path>
<target name="init">
<mkdir dir="bin"/>
<copy includeemptydirs="false" todir="bin">
<fileset dir="src">
<exclude name="**/*.launch"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="bin"/>
</target>
<target depends="clean" name="cleanall">
<ant antfile="build.xml" dir="${JUnitTest1.location}" inheritAll="false" target="clean"/>
</target>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects">
<ant antfile="build.xml" dir="${JUnitTest1.location}" inheritAll="false" target="build-project">
<propertyset>
<propertyref name="build.compiler"/>
</propertyset>
</ant>
</target>
<target depends="init" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
<src path="src"/>
<classpath refid="JUnitTest1UnitTests.classpath"/>
</javac>
</target>
<target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
<target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler">
<copy todir="${ant.library.dir}">
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</copy>
<unzip dest="${ant.library.dir}">
<patternset includes="jdtCompilerAdapter.jar"/>
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</unzip>
</target>
<target description="compile project with Eclipse compiler" name="build-eclipse-compiler">
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
<antcall target="build"/>
</target>
<target name="JUnitTest1UnitTests">
<mkdir dir="${junit.output.dir}"/>
<junit fork="yes" printsummary="withOutAndErr">
<formatter type="xml"/>
<test name="com.me.tests.MyTestClass" todir="${junit.output.dir}"/>
<classpath refid="JUnitTest1UnitTests.classpath"/>
</junit>
</target>
<target name="junitreport">
<junitreport todir="${junit.output.dir}">
<fileset dir="${junit.output.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${junit.output.dir}"/>
</junitreport>
</target>
I believe I've fixed this.
Eclipse creates your build file and seperately, you configure your run configurations. These run configurations (where you specify the run order of the ant tasks) are not persisted or represented in the actual build file.
The default target of the build file is the target="build" ... So you need to manually edit the build file and use the depends="..." clause to chain together the dependancies of your tasks.
This page (read example build file and see final line) has a great explanation of the depends clause.

configure seam 2.2 entitymanager to work on websphere 7

I create a jboss seam 2.2 application using seam-gen tool (ear file)
the application works fine on jboss 4.3,
I managed to run the application on websphere 7 after modifying the jars as per the documents available on seam reference docs,
the problem: i tried many ways to configure the persistence to connect to database, but didn't work.
what is the correct way to have the application connect to DB (oracle) i created a working data-srouce inside websphere 7 but i'm not sure what are the correct configuration inside (components.xml) and (persistence.xml)
Thanks in advance
1- persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for prod profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="shbCalc">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>shbCalcDS</jta-data-source>
<properties>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="none"/>
</properties>
</persistence-unit>
</persistence>
2- components.xml
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:transaction="http://jboss.com/products/seam/transaction"
xmlns:drools="http://jboss.com/products/seam/drools"
xmlns:mail="http://jboss.com/products/seam/mail"
xmlns:web="http://jboss.com/products/seam/web"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd
http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.2.xsd
http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.2.xsd
http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.2.xsd
http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd">
<transaction:ejb-transaction />
<core:init jndi-pattern="ejblocal:#{ejbName}" debug="true" ></core:init>
<persistence:managed-persistence-context name="entityManager" auto-create="true" persistence-unit-jndi-name="#puJndiName#"/>
<core:manager concurrent-request-timeout="500"
conversation-timeout="120000"
conversation-id-parameter="cid"
parent-conversation-id-parameter="pid"/>
<!-- Make sure this URL pattern is the same as that used by the Faces Servlet -->
<web:hot-deploy-filter url-pattern="*.seam"/>
<security:identity authenticate-method="#{authenticator.authenticate}" />
<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
</event>
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
</event>
<mail:mail-session host="localhost" port="25"/>
</components>
3- web.xml
<?xml version="1.0" ?>
<!-- websphere flavor -->
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5" metadata-complete="true">
<!-- RichFaces -->
<context-param>
<param-name>org.richfaces.SKIN</param-name>
<param-value>blueSky</param-value>
</context-param>
<!-- Suppress spurious stylesheets -->
<context-param>
<param-name>org.richfaces.CONTROL_SKINNING</param-name>
<param-value>disable</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.CONTROL_SKINNING_CLASSES</param-name>
<param-value>disable</param-value>
</context-param>
<!-- Change load strategy to DEFAULT to disable sending scripts/styles as packs -->
<context-param>
<param-name>org.richfaces.LoadStyleStrategy</param-name>
<param-value>ALL</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.LoadScriptStrategy</param-name>
<param-value>ALL</param-value>
</context-param>
<!-- Seam -->
<listener>
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
<filter>
<filter-name>Seam Filter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Seam Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Seam Resource Servlet</servlet-name>
<servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Seam Resource Servlet</servlet-name>
<url-pattern>/seam/resource/*</url-pattern>
</servlet-mapping>
<!-- Facelets development mode (disable in production) -->
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>#debug#</param-value>
</context-param>
<!-- JSF -->
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.seam</url-pattern>
</servlet-mapping>
<security-constraint>
<display-name>Restrict raw XHTML Documents</display-name>
<web-resource-collection>
<web-resource-name>XHTML</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<!-- Add entries for each EJB session bean which is also a Seam component (not required on JBoss AS) -->
<persistence-unit-ref>
<persistence-unit-ref-name>jdbc/shbCalcDS</persistence-unit-ref-name>
</persistence-unit-ref>
<ejb-local-ref>
<!-- This matches the pattern set in components.xml -->
<ejb-ref-name>ejblocal:EjbSynchronizations</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>org.jboss.seam.transaction.LocalEjbSynchronizations</local>
</ejb-local-ref>
</web-app>
Finally I found the proper configuration for the application to run on both jboss 4.3 and websphere 7
1- build.xml
<?xml version="1.0"?>
<project name="shbCalc" default="deploy" basedir=".">
<!-- Give user a chance to override without editing this file or typing -D -->
<property file="${basedir}/build.properties"/>
<!-- production is websphere flavor -->
<!-- Dev is jboss flavor -->
<property name="profile" value="prod"/>
<property file="build-${profile}.properties"/>
<!-- set global properties for this build -->
<property name="project.name" value="shbCalc"/>
<property name="project.ear" value="true"/>
<property name="richfaces.present" value="true"/>
<property name="dist.dir" value="dist"/>
<property name="src.model.dir" value="src/main"/>
<property name="src.action.dir" value="src/hot"/>
<property name="src.test.dir" value="src/test"/>
<property name="lib.dir" value="lib"/>
<property name="endorsed.dir" value="${lib.dir}/endorsed"/>
<property name="ear.dir" value="exploded-archives/${project.name}.ear"/>
<property name="exploded.archive.dir" value="${ear.dir}"/>
<property name="jar.dir" value="${ear.dir}/${project.name}_jar"/>
<property name="war.dir" value="${ear.dir}/${project.name}_war"/>
<property name="test.dir" value="test-build"/>
<property name="bootstrap.dir" value="${basedir}/bootstrap"/>
<property name="jboss.domain" value="default"/>
<property name="deploy.dir" value="${jboss.home}/server/${jboss.domain}/deploy"/>
<property name="ear.deploy.dir" value="${deploy.dir}/${project.name}.ear"/>
<property name="jar.deploy.dir" value="${ear.deploy.dir}/${project.name}.jar"/>
<property name="war.deploy.dir" value="${ear.deploy.dir}/${project.name}.war"/>
<property name="packaged.archive" value="${dist.dir}/${project.name}.ear"/>
<property name="testng.jar" value="${basedir}/lib/testng-jdk15.jar"/>
<property name="javac.debug" value="true"/>
<property name="javac.deprecation" value="false"/>
<property name="debug" value="false"/>
<!--Properties for validating configuration files -->
<property name="validate.resources.dir" value="${basedir}/exploded-archives"/>
<property name="schema.dir" value="${basedir}/exploded-archives/schemas"/>
<property name="src.schema.dir" value="${schema.dir}/org/jboss/seam"/>
<property name="schema.version" value="2.2"/>
<fileset id="lib" dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
<path id="build.classpath">
<fileset refid="lib"/>
</path>
<!-- Import GlassFish deployment targets -->
<import file="${basedir}/glassfish-build.xml"/>
<target name="init" description="Initialize the build">
<taskdef name="groovyc"
classname ="org.codehaus.groovy.ant.Groovyc"
classpathref="build.classpath"/> <!-- really only the groovy jar is necessary -->
<mkdir dir="${jar.dir}"/>
<mkdir dir="${ear.dir}"/>
<mkdir dir="${war.dir}"/>
<mkdir dir="${dist.dir}"/>
<condition property="is.debug" value="true">
<istrue value="${debug}"/>
</condition>
<property name="transactionManagerLookupClass" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
<property name="ejbJndiPattern" value="${project.name}/#{ejbName}/local"/>
<property name="seamBootstrapsPu" value="false"/>
<property name="seamEmfRef" value="#{null}"/>
<condition property="puJndiName" value="java:comp/env/${project.name}/pu" else="java:/${project.name}EntityManagerFactory">
<available file="${jboss.home}/lib/jboss-vfs.jar"/> <!-- JBoss AS >= 5.0 -->
</condition>
<filterset id="persistence">
<filter token="transactionManagerLookupClass" value="${transactionManagerLookupClass}"/>
</filterset>
<filterset id="seam">
<filter token="ejbJndiPattern" value="${ejbJndiPattern}"/>
<filter token="seamBootstrapsPu" value="${seamBootstrapsPu}"/>
<filter token="seamEmfRef" value="${seamEmfRef}"/>
<filter token="puJndiName" value="${puJndiName}"/>
</filterset>
<filterset id="profile">
<filter token="debug" value="${debug}"/>
</filterset>
<!-- if a .groovy file is in model or action, set groovy.present -->
<available property="groovy.present" value="true" file="" searchparents="true">
<filepath>
<fileset dir="${src.action.dir}">
<include name="**/*.groovy"/>
</fileset>
<fileset dir="${src.model.dir}">
<include name="**/*.groovy"/>
</fileset>
</filepath>
</available>
<condition property="groovy.test.present" value="true">
<or>
<isset property="groovy.present"/>
<available file="" searchparents="true">
<filepath>
<fileset dir="${src.test.dir}">
<include name="**/*.groovy"/>
</fileset>
</filepath>
</available>
</or>
</condition>
<!-- NOTE: Seam does not properly detect uncompiled groovy classes in an EAR -->
<condition property="groovy.dynamic" value="true">
<and>
<isset property="groovy.present"/>
<istrue value="${debug}"/>
</and>
</condition>
<condition property="groovy.static" value="true">
<and>
<isset property="groovy.present"/>
<isfalse value="${debug}"/>
</and>
</condition>
</target>
<target name="groovy.compile" if="groovy.static">
<groovyc classpathref="build.classpath"
destdir="${jar.dir}"
srcdir="${src.model.dir}">
</groovyc>
<path id="groovy.action.classpath">
<path refid="build.classpath"/>
<dirset dir="${jar.dir}"/>
</path>
<groovyc classpathref="groovy.action.classpath"
destdir="${jar.dir}"
srcdir="${src.action.dir}">
</groovyc>
</target>
<target name="groovy.copy" if="groovy.dynamic">
<copy todir="${jar.dir}">
<fileset dir="${src.action.dir}">
<include name="**/*.groovy"/>
</fileset>
</copy>
</target>
<target name="compile" depends="init,groovy.compile,groovy.copy"
description="Compile the Java source code"
unless="eclipse.running">
<javac classpathref="build.classpath"
destdir="${jar.dir}"
debug="${javac.debug}"
deprecation="${javac.deprecation}"
nowarn="on">
<src path="${src.model.dir}"/>
<src path="${src.action.dir}"/>
</javac>
</target>
<target name="copyclasses" depends="init"
description="Copy the classes that were compiled by eclipse"
if="eclipse.running">
<copy todir="${jar.dir}">
<fileset dir="classes/main">
<include name="**/*.class"/>
</fileset>
<fileset dir="classes/hot">
<include name="**/*.class"/>
</fileset>
</copy>
</target>
<target name="jar" depends="compile,copyclasses"
description="Build the JAR structure in a staging directory">
<copy todir="${jar.dir}">
<fileset dir="${src.model.dir}">
<include name="**/*.component.xml" />
</fileset>
<fileset dir="${basedir}/resources">
<include name="seam.properties"/>
<include name="*.drl"/>
<include name="META-INF/*.drl"/>
</fileset>
</copy>
<copy todir="${jar.dir}/META-INF">
<fileset dir="${basedir}/resources/META-INF">
<include name="ejb-jar.xml"/>
<include name="orm.xml"/>
</fileset>
</copy>
<copy todir="${jar.dir}/">
<fileset dir="${basedir}/resources">
<include name="log4j.xml"/>
</fileset>
</copy>
<copy tofile="${jar.dir}/META-INF/persistence.xml"
file="${basedir}/resources/META-INF/persistence-${profile}.xml">
<filterset refid="persistence"/>
</copy>
<copy tofile="${jar.dir}/import.sql"
file="${basedir}/resources/import-${profile}.sql"/>
</target>
<target name="war" depends="compile"
description="Build the WAR structure in a staging directory">
<copy todir="${war.dir}">
<fileset dir="${basedir}/view"/>
</copy>
<copy tofile="${war.dir}/WEB-INF/classes/seam-jndi.properties"
file="${basedir}/resources/seam-jndi-${profile}.properties">
</copy>
<copy tofile="${war.dir}/WEB-INF/classes/components.properties"
file="${basedir}/resources/components-${profile}.properties">
<filterset refid="seam"/>
<filterset refid="profile"/>
</copy>
<copy tofile="${war.dir}/WEB-INF/components.xml"
file="${basedir}/resources/WEB-INF/components-${profile}.xml">
<filterset refid="seam"/>
<filterset refid="profile"/>
</copy>
<copy todir="${war.dir}/WEB-INF">
<fileset dir="${basedir}/resources/WEB-INF">
<include name="*.*"/>
<include name="lib/*.*"/>
<exclude name="web-*.xml" />
<exclude name="components*.xml"/>
</fileset>
</copy>
<copy todir="${war.dir}/WEB-INF/lib">
<fileset dir="${lib.dir}">
<includesfile name="deployed-jars-war.list"/>
<exclude name="jboss-seam-gen.jar"/>
<exclude name="jboss-seam-debug.jar" unless="is.debug"/>
</fileset>
</copy>
<copy todir="${war.dir}/WEB-INF/classes">
<fileset dir="${basedir}/resources">
<include name="*.skin.properties" if="richfaces.present"/>
<include name="*_theme.properties"/>
<include name="**/*.xcss" if="richfaces.present"/>
</fileset>
<!-- move XCSS into classpath for now
loading from web context only works in JBoss AS 4 -->
<fileset dir="${basedir}/view">
<include name="**/*.xcss" if="richfaces.present"/>
</fileset>
</copy>
<copy tofile="${war.dir}/WEB-INF/web.xml"
file="${basedir}/resources/WEB-INF/web-${profile}.xml">
</copy>
<native2ascii encoding="UTF-8" src="${basedir}/resources"
dest="${war.dir}/WEB-INF/classes"
includes="messages*.properties" />
</target>
<target name="ear" description="Build the EAR structure in a staging directory">
<copy todir="${ear.dir}">
<fileset dir="${basedir}/resources">
<include name="*jpdl.xml"/>
<include name="*hibernate.cfg.xml"/>
<include name="jbpm.cfg.xml"/>
</fileset>
<fileset dir="${lib.dir}">
<include name="jboss-seam.jar"/>
</fileset>
</copy>
<copy todir="${ear.dir}/lib">
<fileset dir="${lib.dir}">
<includesfile name="deployed-jars-ear.list"/>
<exclude name="icefaces-ahs.jar" if="icefaces.present"/>
</fileset>
</copy>
<copy todir="${ear.dir}/META-INF">
<fileset dir="${basedir}/resources/META-INF">
<include name="application.xml"/>
</fileset>
</copy>
<copy tofile="${basedir}/resources/META-INF/jboss-app.xml"
file="${basedir}/resources/META-INF/jboss-app-${profile}.xml">
</copy>
</target>
<target name="clear-profile-artifacts" depends="init"
description="Clear compiled cache of profile-specific artifacts in anticipation of a profile change">
<delete file="${jar.dir}/META-INF/persistence.xml"/>
<delete file="${jar.dir}/import.sql"/>
<delete file="${war.dir}/WEB-INF/classes/components.properties"/>
</target>
<target name="stage" depends="jar,war,ear"/>
<target name="archive" depends="clear-profile-artifacts,stage"
description="Package the archives">
<jar jarfile="${dist.dir}/${project.name}.jar" basedir="${jar.dir}"/>
<jar jarfile="${dist.dir}/${project.name}.war" basedir="${war.dir}"/>
<jar jarfile="${dist.dir}/${project.name}.ear">
<fileset dir="${ear.dir}">
<exclude name="${project.name}_jar/**"/>
<exclude name="${project.name}_war/**"/>
</fileset>
<fileset dir="${dist.dir}">
<include name="${project.name}.jar"/>
<include name="${project.name}.war"/>
</fileset>
</jar>
</target>
<target name="datasource">
<fail unless="jboss.home">jboss.home not set</fail>
<copy file="${basedir}/resources/${project.name}-${profile}-ds.xml"
tofile="${deploy.dir}/${project.name}-ds.xml"/>
</target>
<target name="explode" depends="stage,datasource"
description="Deploy the exploded archive">
<fail unless="jboss.home">jboss.home not set</fail>
<copy todir="${ear.deploy.dir}">
<fileset dir="${ear.dir}">
<include name="**/*"/>
<exclude name="${project.name}_jar/**"/>
<exclude name="${project.name}_war/**"/>
</fileset>
</copy>
<copy todir="${jar.deploy.dir}">
<fileset dir="${jar.dir}"/>
</copy>
<copy todir="${war.deploy.dir}">
<fileset dir="${war.dir}"/>
</copy>
</target>
<target name="unexplode" description="Undeploy the exploded archive">
<delete failonerror="no">
<fileset dir="${ear.deploy.dir}">
<exclude name="**/*.jar"/>
</fileset>
</delete>
<delete file="${deploy.dir}/${project.name}-ds.xml" failonerror="no"/>
<delete dir="${ear.deploy.dir}" failonerror="no"/>
</target>
<target name="reexplode" depends="unexplode,clean,explode"
description="Undeploy the exploded archive, clean, then deploy the exploded archive"/>
<target name="check-deployed" description="Check to see if packaged archive is currently deployed">
<fail unless="jboss.home">jboss.home not set</fail>
<condition property="archive.deployed" value="true">
<available file="${ear.deploy.dir}" type="file"/>
</condition>
</target>
<target name="restart-exploded" unless="archive.deployed" description="Deploy exploded archive if not deployed as packaged archive">
<antcall target="explode"/>
<touch file="${ear.deploy.dir}/META-INF/application.xml"/>
</target>
<target name="restart-deployed" if="archive.deployed" description="Deploy packaged archive if deployed as packaged archive">
<antcall target="deploy"/>
</target>
<target name="restart" depends="check-deployed,clear-profile-artifacts,restart-exploded,restart-deployed" description="Restart the exploded archive"/>
<target name="deploy" depends="archive,datasource" description="Deploy the packaged archive">
<fail unless="jboss.home">jboss.home not set</fail>
<copy todir="${deploy.dir}" file="${dist.dir}/${project.name}.ear"/>
</target>
<target name="undeploy" description="Undeploy the packaged archive">
<delete file="${deploy.dir}/${project.name}.ear"/>
<delete file="${deploy.dir}/${project.name}-ds.xml"/>
</target>
<target name="redeploy" depends="undeploy,clean,deploy"
description="Undeploy the packaged archive, clean, then deploy the packaged archive"/>
<target name="clean" description="Cleans up the staging directory">
<delete dir="${dist.dir}"/>
<delete dir="${basedir}/exploded-archives"/>
<delete dir="${src.schema.dir}" failonerror="no"/>
<delete dir="${basedir}/test-report"/>
<delete dir="${basedir}/test-output"/>
<delete failonerror="no" includeemptydirs="true">
<fileset dir="${test.dir}">
<exclude name="**/*.class" if="eclipse.running"/>
</fileset>
</delete>
</target>
<target name="compiletest" depends="groovy.compiletest" unless="eclipse.running" description="Compile the Java source code for the tests">
<mkdir dir="${test.dir}"/>
<javac classpathref="build.classpath"
destdir="${test.dir}"
debug="${javac.debug}"
deprecation="${javac.deprecation}"
nowarn="on">
<src path="${src.action.dir}"/>
<src path="${src.model.dir}"/>
<src path="${src.test.dir}"/>
</javac>
</target>
<target name="groovy.compiletest" if="groovy.test.present" description="Compile the Groovy source code for the tests">
<mkdir dir="${test.dir}"/>
<groovyc classpathref="build.classpath"
destdir="${test.dir}">
<src path="${src.action.dir}"/>
<src path="${src.model.dir}"/>
<src path="${src.test.dir}"/>
</groovyc>
</target>
<target name="copytestclasses" if="eclipse.running" description="Copy classes compiled by eclipse to the test dir">
<mkdir dir="${test.dir}"/>
<copy todir="${test.dir}">
<fileset dir="classes/main">
<include name="**/*.class"/>
</fileset>
</copy>
<copy todir="${test.dir}">
<fileset dir="classes/hot">
<include name="**/*.class"/>
</fileset>
</copy>
<copy todir="${test.dir}">
<fileset dir="classes/test">
<include name="**/*.class"/>
</fileset>
</copy>
</target>
<target name="buildtest" depends="init,compiletest,copytestclasses" description="Build the tests">
<copy todir="${test.dir}">
<fileset dir="${basedir}/resources">
<exclude name="META-INF/persistence*.xml"/>
<exclude name="import*.sql"/>
<exclude name="${project.name}-*-ds.xml"/>
<exclude name="components-*.properties"/>
</fileset>
<fileset dir="${basedir}/view"/>
</copy>
<copy tofile="${test.dir}/META-INF/persistence.xml"
file="${basedir}/resources/META-INF/persistence-test.xml"/>
<copy tofile="${test.dir}/import.sql"
file="${basedir}/resources/import-test.sql"/>
<copy tofile="${test.dir}/components.properties"
file="${basedir}/resources/components-test.properties"/>
<copy todir="${test.dir}" flatten="true">
<fileset dir="${src.test.dir}">
<include name="**/*Test.xml"/>
</fileset>
</copy>
</target>
<target name="test" depends="buildtest" description="Run the tests">
<fail message="Cannot run tests because path to project contains spaces.">
<condition>
<contains string="${basedir}" substring=" "/>
</condition>
</fail>
<condition property="incompatible.jdk" value="true">
<and>
<equals arg1="${ant.java.version}" arg2="1.6"/>
<not><available classname="javax.xml.bind.JAXB"/></not>
</and>
</condition>
<fail if="incompatible.jdk">You are using an incompatible JDK 6. Please use Sun JDK 6 Update 4 (1.6.0_04) or newer or use Open JDK 6.</fail>
<taskdef resource="testngtasks" classpath="${testng.jar}"/>
<path id="test.path">
<path path="${test.dir}"/>
<fileset dir="${lib.dir}/test">
<include name="*.jar"/>
</fileset>
<path path="${bootstrap.dir}"/>
<path refid="build.classpath"/>
</path>
<testng outputdir="${basedir}/test-report">
<jvmarg line="-Dsun.lang.ClassLoader.allowArraySyntax=true"/>
<classpath refid="test.path"/>
<xmlfileset dir="${test.dir}" includes="*Test.xml"/>
</testng>
</target>
<target name="javadoc" depends="compile">
<mkdir dir="${dist.dir}/apidoc"/>
<javadoc classpathref="build.classpath" destdir="${dist.dir}/apidoc" use="true" protected="true" version="true" windowtitle="${project.name} API Documentation" doctitle="${project.name} API Documentation" link="http://java.sun.com/j2se/5.0/docs/api">
<packageset dir="${src.action.dir}" defaultexcludes="yes">
<include name="*/**"/>
</packageset>
<packageset dir="${src.model.dir}" defaultexcludes="yes">
<include name="*/**"/>
</packageset>
</javadoc>
</target>
<!-- deprecated -->
<target name="validateConfiguration" depends="validate"/>
<target name="validate" depends="stage" description="Validate the XML configuration files">
<mkdir dir="${schema.dir}"/>
<unjar src="${lib.dir}/jboss-seam.jar" dest="${schema.dir}">
<patternset>
<include name="org/jboss/seam/*.xsd"/>
<include name="org/jboss/seam/*.dtd"/>
</patternset>
</unjar>
<ant antfile="validate.xml" target="validateConfiguration"/>
</target>
<target name="purge" depends="undeploy" description="Clean out JBoss AS temporary deployment files">
<delete dir="${jboss.home}/server/default/tmp/deploy"/>
<mkdir dir="${jboss.home}/server/default/tmp/deploy/"/>
<delete dir="${jboss.home}/server/default/tmp/sessions"/>
<mkdir dir="${jboss.home}/server/default/tmp/sessions"/>
<delete dir="${jboss.home}/server/default/work/jboss.web/localhost/${project.name}"/>
</target>
</project>
2- components-prod.xml
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:drools="http://jboss.com/products/seam/drools"
xmlns:mail="http://jboss.com/products/seam/mail"
xmlns:web="http://jboss.com/products/seam/web"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd
http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.2.xsd
http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.2.xsd
http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd">
<persistence:entity-manager-factory name="shbCalc"/>
<persistence:managed-persistence-context name="entityManager" auto-create="true"
entity-manager-factory="#{shbCalc}"/>
<core:init jndi-pattern="ejblocal:#{ejbName}" debug="true" ></core:init>
<core:manager concurrent-request-timeout="500"
conversation-timeout="120000"
conversation-id-parameter="cid"
parent-conversation-id-parameter="pid"/>
<!-- Make sure this URL pattern is the same as that used by the Faces Servlet -->
<web:hot-deploy-filter url-pattern="*.seam"/>
<security:identity authenticate-method="#{authenticator.authenticate}" />
<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
</event>
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
</event>
<mail:mail-session host="localhost" port="25"/>
</components>
3- persistence-prod.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for prod profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="shbCalc">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>shbCalcDS</jta-data-source>
<properties>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="none"/>
</properties>
</persistence-unit>
</persistence>
4- deployed-jars-ear.list
antlr-runtime.jar
commons-beanutils.jar
#core.jar
drools-templates.jar
drools-decisiontables.jar
drools-compiler.jar
drools-api.jar
drools-core.jar
groovy-all.jar
janino.jar
jboss-el.jar
#jboss-seam-remoting.jar
mvel2.jar
richfaces-api.jar
jbpm-jpdl.jar
antlr.jar
commons-collections.jar
commons-digester.jar
dom4j.jar
el-ri.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-core.jar
hibernate-entitymanager.jar
hibernate-validator.jar
javassist.jar
jboss-el.jar
log4j.jar
richfaces-api.jar
slf4j-api.jar
slf4j-log4j12.jar
jboss-common.jar
5- deployed-jars-war.list
#commons-digester.jar
jboss-seam-debug.jar
#jboss-seam-excel.jar
#jboss-seam-ioc.jar
#jboss-seam-mail.jar
## jboss-seam-pdf.jar
#jboss-seam-rss.jar
jboss-seam-ui.jar
jsf-facelets.jar
#jxl.jar
richfaces-impl.jar
richfaces-ui.jar
hibernate-entitymanager.jar

Junit report test result is displayed blank

whenever i execute build.xml for first instant, generated report is blank. Now when i again execute the same build.xml for second time, it displays the timestamp of previous run.
Can anyone help me in understanding this situation
Build.xml :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- WARNING: Eclipse auto-generated file.
Any modifications will be overwritten.
To include a user specific buildfile here, simply create one in the same
directory with the processing instruction <?eclipse.ant.import?>
as the first entry and export the buildfile again. -->
<project basedir="." default="build" name="test">
<property environment="env"/>
<property name="ECLIPSE_HOME" value="C:/Users/Downloads/eclipse"/>
<property name="junit.output.dir" value="junit"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.6"/>
<property name="source" value="1.6"/>
<path id="test.classpath">
<pathelement location="bin"/>
<pathelement location="../lib/junit-4.11.jar"/>
<pathelement location="../lib/jxl-2.6.jar"/>
<pathelement location="../lib/selenium-java-client-driver-1.0.2.jar"/>
<pathelement location="../lib/selenium-server-standalone-2.31.0.jar"/>
<pathelement location="../lib/xalan-2.7.1.jar"/>
<pathelement location="C:/Users/Downloads/eclipse/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant-junit.jar"/>
</path>
<target name="init">
<mkdir dir="bin"/>
<mkdir dir="build/classes" />
<mkdir dir="dist"/>
</target>
<target name ="compile" depends="init">
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name ="jar" depends="compile">
<jar destfile="dist/test.jar" basedir="build/classes" />
</target>
<target name="clean">
<delete dir="bin"/>
<delete dir="dist" />
</target>
<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects"/>
<target depends="init" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}" includeantruntime="false">
<src path="src"/>
<classpath refid="test.classpath"/>
</javac>
</target>
<target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
<target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler">
<copy todir="${ant.library.dir}">
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</copy>
<unzip dest="${ant.library.dir}">
<patternset includes="jdtCompilerAdapter.jar"/>
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</unzip>
</target>
<target description="compile project with Eclipse compiler" name="build-eclipse-compiler">
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
<antcall target="build"/>
</target>
<target name="test">
<mkdir dir="${junit.output.dir}"/>
<junit fork="yes" printsummary="withOutAndErr">
<formatter type="xml"/>
<test name="AllTests" todir="${junit.output.dir}/Project"/>
<classpath refid="test.classpath"/>
</junit>
</target>
<target name="junitreport">
<junitreport todir="${junit.output.dir}">
<fileset dir="${junit.output.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${junit.output.dir}/Project"/>
</junitreport>
</target>
It sounds like your targets aren't being run in the desired order. You really should have the dependencies specified in the Ant task itself. For example, I've added the fact that unitreport depends on test in this example.
<target name="test">
<mkdir dir="${junit.output.dir}"/>
<junit fork="yes" printsummary="withOutAndErr">
<formatter type="xml"/>
<test name="AllTests" todir="${junit.output.dir}/Project"/>
<classpath refid="test.classpath"/>
</junit>
</target>
<target name="junitreport" depends="test">
<junitreport todir="${junit.output.dir}">
<fileset dir="${junit.output.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${junit.output.dir}/Project"/>
</junitreport>
</target>
</project>

Trying create db using ant

My build.xml
<?xml version='1.0'?>
<project xmlns:ivy="antlib:org.apache.ivy.ant" name='myTest' basedir='.' default='usage'>
<property file='build.properties' />
<property name='src.dir' value='src' />
<property name='web.dir' value='war' />
<property name='build.dir' value='${web.dir}/WEB-INF/classes' />
<property name='name' value='myTest' />
<property name="sql.driver" value="org.postgresql.Driver"/>
<property name="sql.url" value="jdbc:postgresql://localhost:5432/tbook"/>
<property name="sql.user" value="postgres"/>
<property name="sql.pass" value="admin"/>
<path id='master-classpath'>
<fileset dir='${web.dir}/WEB-INF/lib'>
<include name='*.jar' />
</fileset>
<!-- We need the servlet API classes: -->
<!-- * for Tomcat 5/6 use servlet-api.jar -->
<!-- * for other app servers - check the docs -->
<fileset dir='${appserver.lib}'>
<include name='servlet*.jar' />
</fileset>
<pathelement path='${build.dir}' />
</path>
<target name='usage'>
<echo message='' />
<echo message='${name} build file' />
<echo message='-----------------------------------' />
<echo message='' />
<echo message='Available targets are:' />
<echo message='' />
<echo message='build --> Build the application' />
<echo message='deploy --> Deploy application as directory' />
<echo message='deploywar --> Deploy application as a WAR file' />
<echo message='resolve --> retrieve dependencies with ivy' />
<echo message='' />
</target>
<target name="createDB_PostgreSQl">
<sql driver="${sql.driver}"
url="${sql.url}"
userid="${sql.user}"
password="${sql.pass}"
src="db.sql">
<classpath refid="master-classpath"/>
</sql>
</target>
<target name="dropDB_PostgreSQl">
<input message="Do you really want to delete this table (y/n)?" validargs="y,n" addproperty="do.delete" />
<condition property="do.abort">
<equals arg1="n" arg2="${do.delete}"/>
</condition>
<fail if="do.abort">Build aborted by user.</fail>
<sql driver="${sql.driver}" url="${sql.url}" userid="${sql.user}" password="${sql.pass}" >
<classpath>
<pathelement location="postgresql-9.0-802.jdbc4.jar"/>
</classpath>
drop database sample_project;
</sql>
</target>
<target name="createTables_PostgreSQL">
<sql driver="${sql.driver}" url="${sql.url}" userid="${sql.user}" password="${sql.pass}" >
<classpath refid="master-classpath"/>
<transaction src="user.sql"/>
</sql>
</target>
<target name='build' description='Compile main source tree java files'>
<mkdir dir='${build.dir}' />
<javac destdir='${build.dir}' source='1.5' target='1.5' debug='true'
deprecation='false' optimize='false' failonerror='true'>
<src path='${src.dir}' />
<classpath refid='master-classpath' />
</javac>
</target>
<target name="clean">
<delete includeemptydirs="false">
<fileset dir="build/" includes="**/**"/>
</delete>
</target>
<target name='deploy' depends='build' description='Deploy application'>
<copy todir='${deploy.path}/${name}' preservelastmodified='true'>
<fileset dir='${web.dir}'>
<include name='**/*.*' />
</fileset>
</copy>
</target>
<target name="resolve" description="retrieve dependencies with ivy">
<ivy:retrieve />
</target>
<target name='deploywar' depends='build'
description='Deploy application as a WAR file'>
<war destfile='${name}.war' webxml='${web.dir}/WEB-INF/web.xml'>
<fileset dir='${web.dir}'>
<include name='**/*.*' />
</fileset>
</war>
<copy todir='${deploy.path}' preservelastmodified='true'>
<fileset dir='.'>
<include name='*.war' />
</fileset>
</copy>
</target>
</project>
Exception is:
org.postgresql.util.PSQLException:ERROR: CREATE DATABASE can not be executed inside a transaction block
Take a look at this thread from the past. http://archives.postgresql.org/pgsql-jdbc/2005-11/msg00132.php
Basically for the create db task add this autocommit="true"

Java EE eclipse project directory structure?

I am attempting to setup a sample dynamic web project in Eclipse using Java EE, Spring and Maven (using Nexus repository manager). I was wondering if anybody knows the "best practice" directory structure that I should setup for an enterprise web app in Eclipse? Should I just stick with the default structure that is setup for me? I ask because looking around the internet I see wide variation (for instance, where the WEB-INF and META-INF folders are..if there is a 'war' directory etc.). Thanks!
If you use Maven, I'd warmly recommend to just follow Maven's convention. This is the "best practice" in Maven's world (and I don't see any good reasons to not do so, not following this advice will lead to more work).
One easy way to create a webapp project is to use the maven-archetype-webapp:
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=com.mycompany.app \
-DartifactId=my-webapp \
-Dversion=1.0-SNAPSHOT
(You can paste this command "as is" in a Linux shell; on Windows, type everything on single line without the "\".)
And this is the structure you'll get:
my-webapp
|-- pom.xml
`-- src
`-- main
|-- resources
`-- webapp
|-- WEB-INF
| `-- web.xml
`-- index.jsp
This layout is compliant with Eclipse WTP (whatever plugin you're using for the Eclipse integration). Just import this project into Eclipse and there you go.
If you have more specific question, feel free to ask (for example, most of time you don't have to worry about the META-INF directory, but put it under src/main/resources if really you need to have it).
If you're using Maven, it's best to follow their convention.
If you're using Spring, you don't need an EAR. A WAR will do just fine.
A WAR file has a definite standard that you must follow. As long as you can generate a proper WAR file, you can use any directory structure for your source code that makes sense to you.
I use something like this:
/project
+---/src (.java)
+---/test (TestNG .java here)
+---/test-lib (testNG JAR, Spring test JAR, etc.)
+---/resources (log4j.xml, etc.)
+---/web (root of web content here)
+---+---/WEB-INF
+---+---+---/classes (compile .java to this directory)
+---+---+---/lib (JAR files)
I use IntelliJ, so it creates an exploded WAR file as output for me.
I have an Ant build.xml that generally follows the IntelliJ directory structure. You're welcome to crib it if you find it useful.
<?xml version="1.0" encoding="UTF-8"?>
<project name="xslt-converter" basedir="." default="package">
<property name="version" value="1.6"/>
<property name="haltonfailure" value="no"/>
<property name="out" value="out"/>
<property name="production.src" value="src"/>
<property name="production.lib" value="lib"/>
<property name="production.resources" value="config"/>
<property name="production.classes" value="${out}/production/${ant.project.name}"/>
<property name="test.src" value="test"/>
<property name="test.lib" value="lib"/>
<property name="test.resources" value="config"/>
<property name="test.classes" value="${out}/test/${ant.project.name}"/>
<property name="exploded" value="out/exploded/${ant.project.name}"/>
<property name="exploded.classes" value="${exploded}/WEB-INF/classes"/>
<property name="exploded.lib" value="${exploded}/WEB-INF/lib"/>
<property name="reports.out" value="${out}/reports"/>
<property name="junit.out" value="${reports.out}/junit"/>
<property name="testng.out" value="${reports.out}/testng"/>
<path id="production.class.path">
<pathelement location="${production.classes}"/>
<pathelement location="${production.resources}"/>
<fileset dir="${production.lib}">
<include name="**/*.jar"/>
<exclude name="**/junit*.jar"/>
<exclude name="**/*test*.jar"/>
</fileset>
</path>
<path id="test.class.path">
<path refid="production.class.path"/>
<pathelement location="${test.classes}"/>
<pathelement location="${test.resources}"/>
<fileset dir="${test.lib}">
<include name="**/junit*.jar"/>
<include name="**/*test*.jar"/>
</fileset>
</path>
<path id="testng.class.path">
<fileset dir="${test.lib}">
<include name="**/testng*.jar"/>
</fileset>
</path>
<available file="${out}" property="outputExists"/>
<target name="clean" description="remove all generated artifacts" if="outputExists">
<delete dir="${out}" includeEmptyDirs="true"/>
<delete dir="${reports.out}" includeEmptyDirs="true"/>
</target>
<target name="create" description="create the output directories" unless="outputExists">
<mkdir dir="${production.classes}"/>
<mkdir dir="${test.classes}"/>
<mkdir dir="${reports.out}"/>
<mkdir dir="${junit.out}"/>
<mkdir dir="${testng.out}"/>
<mkdir dir="${exploded.classes}"/>
<mkdir dir="${exploded.lib}"/>
</target>
<target name="compile" description="compile all .java source files" depends="create">
<!-- Debug output
<property name="production.class.path" refid="production.class.path"/>
<echo message="${production.class.path}"/>
-->
<javac srcdir="src" destdir="${out}/production/${ant.project.name}" debug="on" source="${version}">
<classpath refid="production.class.path"/>
<include name="**/*.java"/>
<exclude name="**/*Test.java"/>
</javac>
<javac srcdir="${test.src}" destdir="${out}/test/${ant.project.name}" debug="on" source="${version}">
<classpath refid="test.class.path"/>
<include name="**/*Test.java"/>
</javac>
</target>
<target name="junit-test" description="run all junit tests" depends="compile">
<!-- Debug output
<property name="test.class.path" refid="test.class.path"/>
<echo message="${test.class.path}"/>
-->
<junit printsummary="yes" haltonfailure="${haltonfailure}">
<classpath refid="test.class.path"/>
<formatter type="xml"/>
<batchtest fork="yes" todir="${junit.out}">
<fileset dir="${test.src}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
<junitreport todir="${junit.out}">
<fileset dir="${junit.out}">
<include name="TEST-*.xml"/>
</fileset>
<report todir="${junit.out}" format="frames"/>
</junitreport>
</target>
<taskdef resource="testngtasks" classpathref="testng.class.path"/>
<target name="testng-test" description="run all testng tests" depends="compile">
<!-- Debug output
<property name="test.class.path" refid="test.class.path"/>
<echo message="${test.class.path}"/>
-->
<testng classpathref="test.class.path" outputDir="${testng.out}" haltOnFailure="${haltonfailure}" verbose="2" parallel="methods" threadcount="50">
<classfileset dir="${out}/test/${ant.project.name}" includes="**/*.class"/>
</testng>
</target>
<target name="exploded" description="create exploded deployment" depends="testng-test">
<copy todir="${exploded.classes}">
<fileset dir="${production.classes}"/>
</copy>
<copy todir="${exploded.lib}">
<fileset dir="${production.lib}"/>
</copy>
</target>
<target name="package" description="create package file" depends="exploded">
<jar destfile="${out}/${ant.project.name}.jar" basedir="${production.classes}" includes="**/*.class"/>
</target>
</project>