From: <fg...@us...> - 2008-01-08 09:26:19
|
Revision: 518 http://openutils.svn.sourceforge.net/openutils/?rev=518&view=rev Author: fgiust Date: 2008-01-08 01:26:20 -0800 (Tue, 08 Jan 2008) Log Message: ----------- next generation spring/dbunit tests Modified Paths: -------------- trunk/openutils-testing-junit/pom.xml trunk/openutils-testing-junit-dwr/pom.xml trunk/openutils-testing-testng/pom.xml trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/DbUnitTestCase.java trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/GenericsDbUnitTestCase.java trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/SpringTestCase.java trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/utils/DateAssert.java trunk/openutils-testing-testng-dwr/pom.xml Added Paths: ----------- trunk/openutils-testing/src/main/ trunk/openutils-testing/src/main/java/ trunk/openutils-testing/src/main/java/it/ trunk/openutils-testing/src/main/java/it/openutils/ trunk/openutils-testing/src/main/java/it/openutils/testing/ trunk/openutils-testing/src/main/java/it/openutils/testing/DateAssert.java trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitConfiguration.java trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitUtils.java trunk/openutils-testing/src/main/java/it/openutils/testing/RegExpTableFilter.java trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/AbstractDbUnitTestNGSpringContextTests.java Added: trunk/openutils-testing/src/main/java/it/openutils/testing/DateAssert.java =================================================================== --- trunk/openutils-testing/src/main/java/it/openutils/testing/DateAssert.java (rev 0) +++ trunk/openutils-testing/src/main/java/it/openutils/testing/DateAssert.java 2008-01-08 09:26:20 UTC (rev 518) @@ -0,0 +1,100 @@ +package it.openutils.testing; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + + +/** + * Utility methods for checking dates in unit tests. + * @author fgiust + * @version $Id$ + */ +public final class DateAssert +{ + + private static DateFormat df = new SimpleDateFormat("yyyyMMdd"); + + private static DateFormat dtf = new SimpleDateFormat("yyyyMMdd HH:mm"); + + /** + * Don't instantiate. + */ + private DateAssert() + { + // unused + } + + /** + * Asserts that two dates are equal. + * @param expectedDateAsString date formatted as "YYYYMMDD" + * @param date actual date + * @throws IllegalArgumentException if <code>expectedDateAsString</code> is not a valid date format + */ + public static void dateEqual(String expectedDateAsString, Calendar date) throws IllegalArgumentException + { + Date expected; + + try + { + expected = df.parse(expectedDateAsString); + } + catch (ParseException e) + { + throw new IllegalArgumentException("Unparseable date String: [" + expectedDateAsString + "]"); + } + + if (date == null) + { + throw new AssertionError("Date is null"); + } + if (!date.equals(expected)) + { + throw new AssertionError("Expected <" + expected + ">, actual <" + date.getTime() + ">"); + } + } + + /** + * Asserts that two dates are equal. + * @param expectedDateAsString date formatted as "yyyyMMdd HH:mm" + * @param date actual date + * @throws IllegalArgumentException if <code>expectedDateAsString</code> is not a valid date format + */ + public static void dateTimeEqual(String expectedDateAsString, Date date) throws IllegalArgumentException + { + Date expected; + + try + { + expected = dtf.parse(expectedDateAsString); + } + catch (ParseException e) + { + throw new IllegalArgumentException("Unparseable date String: [" + expectedDateAsString + "]"); + } + + if (date == null) + { + throw new AssertionError("Date is null"); + } + + if (date.getTime() != expected.getTime()) + { + throw new AssertionError("Expected <" + expected + ">, actual <" + date + ">"); + } + } + + /** + * Asserts that two dates are equal. + * @param expectedDateAsString date formatted as "yyyyMMdd HH:mm" + * @param date actual date + * @throws IllegalArgumentException if <code>expectedDateAsString</code> is not a valid date format + */ + public static void dateTimeEqual(String expectedDateAsString, Calendar date) throws IllegalArgumentException + { + dateTimeEqual(expectedDateAsString, date.getTime()); + } + +} Property changes on: trunk/openutils-testing/src/main/java/it/openutils/testing/DateAssert.java ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitConfiguration.java =================================================================== --- trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitConfiguration.java (rev 0) +++ trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitConfiguration.java 2008-01-08 09:26:20 UTC (rev 518) @@ -0,0 +1,34 @@ +package it.openutils.testing; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +/** + * @author fgiust + * @version $Id: $ + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Inherited +@Documented +public @interface DbUnitConfiguration { + + /** + * The resource locations to use for loading dbunit dataset. + */ + String[] datasets() default {}; + + String dataSource() default ""; + + String schema() default ""; + + String excludedTables() default "(^\\$(.*))"; // oracle recycle bin + + boolean truncateAll() default true; + +} \ No newline at end of file Property changes on: trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitConfiguration.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitUtils.java =================================================================== --- trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitUtils.java (rev 0) +++ trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitUtils.java 2008-01-08 09:26:20 UTC (rev 518) @@ -0,0 +1,100 @@ +package it.openutils.testing; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.sql.SQLException; + +import org.apache.commons.lang.StringUtils; +import org.dbunit.database.IDatabaseConnection; +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.FilteredDataSet; +import org.dbunit.dataset.IDataSet; +import org.dbunit.dataset.excel.XlsDataSet; +import org.dbunit.dataset.xml.XmlDataSet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author fgiust + * @version $Id: $ + */ +public final class DbUnitUtils +{ + + /** + * Logger. + */ + private static Logger log = LoggerFactory.getLogger(DbUnitUtils.class); + + /** + * @param connection + * @param tableNames + * @param file + * @param xls + * @throws SQLException + * @throws IOException + * @throws DataSetException + */ + public static void exportDataset(IDatabaseConnection connection, String[] tableNames, File file) + throws SQLException, IOException, DataSetException + { + OutputStream fos = null; + + try + { + IDataSet fullDataSet = connection.createDataSet(); + + if (tableNames != null && tableNames.length > 0) + { + fullDataSet = new FilteredDataSet(tableNames, fullDataSet); + } + + fos = new FileOutputStream(file); + if (StringUtils.equalsIgnoreCase(StringUtils.substringAfterLast(file.getName(), "."), "xls")) + { + XlsDataSet.write(fullDataSet, fos); + } + else + { + XmlDataSet.write(fullDataSet, fos); + } + } + finally + { + connection.close(); + fos.close(); + } + + log.debug("Dataset exported at {}", file.getAbsolutePath()); + } + + /** + * @param url + * @return + * @throws IOException + * @throws DataSetException + */ + public static IDataSet loadDataset(URL url) throws IOException, DataSetException + { + if (url == null) + { + throw new IllegalArgumentException("URL is null"); + } + InputStream is = url.openStream(); + IDataSet dataSet = null; + + if (is != null) + { + log.debug("loading dataset {}", url.getFile()); + dataSet = url.getFile().endsWith(".xls") ? new XlsDataSet(is) : new XmlDataSet(is); + is.close(); + } + return dataSet; + } + +} Property changes on: trunk/openutils-testing/src/main/java/it/openutils/testing/DbUnitUtils.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-testing/src/main/java/it/openutils/testing/RegExpTableFilter.java =================================================================== --- trunk/openutils-testing/src/main/java/it/openutils/testing/RegExpTableFilter.java (rev 0) +++ trunk/openutils-testing/src/main/java/it/openutils/testing/RegExpTableFilter.java 2008-01-08 09:26:20 UTC (rev 518) @@ -0,0 +1,35 @@ +package it.openutils.testing; + +import java.util.regex.Pattern; + +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.filter.AbstractTableFilter; + + +/** + * @author fgiust + * @version $Id: $ + */ +public class RegExpTableFilter extends AbstractTableFilter +{ + + private Pattern pattern; + + public RegExpTableFilter(String pattern) + { + if (pattern != null) + { + this.pattern = Pattern.compile(pattern); + } + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isValidName(String tableName) throws DataSetException + { + return pattern == null || pattern.matcher(tableName).matches(); + } + +} Property changes on: trunk/openutils-testing/src/main/java/it/openutils/testing/RegExpTableFilter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Modified: trunk/openutils-testing-junit/pom.xml =================================================================== --- trunk/openutils-testing-junit/pom.xml 2008-01-08 09:25:06 UTC (rev 517) +++ trunk/openutils-testing-junit/pom.xml 2008-01-08 09:26:20 UTC (rev 518) @@ -9,10 +9,30 @@ </parent> <artifactId>openutils-testing-junit</artifactId> <name>openutils test utils (junit)</name> - <version>1.1.4-SNAPSHOT</version> + <version>2.0-SNAPSHOT</version> <description>openutils test utils</description> <dependencies> <dependency> + <groupId>net.sourceforge.openutils</groupId> + <artifactId>openutils-testing</artifactId> + <version>2.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <version>${spring.version}</version> + <exclusions> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + <exclusion> + <groupId>org.testng</groupId> + <artifactId>testng</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.2</version> Modified: trunk/openutils-testing-junit-dwr/pom.xml =================================================================== --- trunk/openutils-testing-junit-dwr/pom.xml 2008-01-08 09:25:06 UTC (rev 517) +++ trunk/openutils-testing-junit-dwr/pom.xml 2008-01-08 09:26:20 UTC (rev 518) @@ -9,10 +9,30 @@ </parent> <artifactId>openutils-testing-junit-dwr</artifactId> <name>openutils test utils (junit) for dwr</name> - <version>1.2-SNAPSHOT</version> + <version>2.0-SNAPSHOT</version> <description>openutils test utils for dwr</description> <dependencies> <dependency> + <groupId>net.sourceforge.openutils</groupId> + <artifactId>openutils-testing</artifactId> + <version>2.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <version>${spring.version}</version> + <exclusions> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + <exclusion> + <groupId>org.testng</groupId> + <artifactId>testng</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.4.3</version> Modified: trunk/openutils-testing-testng/pom.xml =================================================================== --- trunk/openutils-testing-testng/pom.xml 2008-01-08 09:25:06 UTC (rev 517) +++ trunk/openutils-testing-testng/pom.xml 2008-01-08 09:26:20 UTC (rev 518) @@ -13,6 +13,26 @@ <description>openutils test utils</description> <dependencies> <dependency> + <groupId>net.sourceforge.openutils</groupId> + <artifactId>openutils-testing</artifactId> + <version>2.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <version>${spring.version}</version> + <exclusions> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.4.1</version> Added: trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/AbstractDbUnitTestNGSpringContextTests.java =================================================================== --- trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/AbstractDbUnitTestNGSpringContextTests.java (rev 0) +++ trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/AbstractDbUnitTestNGSpringContextTests.java 2008-01-08 09:26:20 UTC (rev 518) @@ -0,0 +1,182 @@ +package it.openutils.testing.testng; + +import it.openutils.testing.DbUnitConfiguration; +import it.openutils.testing.DbUnitUtils; +import it.openutils.testing.RegExpTableFilter; + +import java.io.IOException; +import java.net.URL; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +import javax.sql.DataSource; + +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.StringUtils; +import org.dbunit.DatabaseUnitException; +import org.dbunit.database.DatabaseConnection; +import org.dbunit.database.DatabaseSequenceFilter; +import org.dbunit.database.IDatabaseConnection; +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.FilteredDataSet; +import org.dbunit.dataset.IDataSet; +import org.dbunit.dataset.filter.ITableFilter; +import org.dbunit.dataset.filter.SequenceTableFilter; +import org.dbunit.operation.DatabaseOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests; +import org.testng.annotations.BeforeMethod; + + +/** + * @author fgiust + * @version $Id: $ + */ +public class AbstractDbUnitTestNGSpringContextTests extends AbstractTransactionalTestNGSpringContextTests +{ + + /** + * Logger. + */ + private Logger log = LoggerFactory.getLogger(AbstractDbUnitTestNGSpringContextTests.class); + + /** + * Dataset cache. + */ + private Map<String, IDataSet> datasetCache = new HashMap<String, IDataSet>(); + + protected static IDataSet truncateDataSet; + + /** + * Setup the Database before running the test method. + * @throws Exception Any exception. + */ + @SuppressWarnings("unchecked") + @BeforeMethod + protected void setUpDbUnit() throws Exception + { + final DbUnitConfiguration dbUnitConfiguration = getClass().getAnnotation(DbUnitConfiguration.class); + if (dbUnitConfiguration != null) + { + String[] datasets = dbUnitConfiguration.datasets(); + + IDatabaseConnection connection = new DatabaseConnection(getDatasource(dbUnitConfiguration.dataSource()) + .getConnection(), dbUnitConfiguration.schema()); + + try + { + ITableFilter tableFilter = new RegExpTableFilter(dbUnitConfiguration.excludedTables()); + + if (dbUnitConfiguration.truncateAll()) + { + truncateAll(connection, tableFilter); + } + + for (String datasetFile : datasets) + { + importDataSet(createDataset(datasetFile), connection, tableFilter); + } + } + finally + { + connection.close(); + } + } + } + + /** + * @param datasetFile + * @return + * @throws IOException + * @throws DataSetException + */ + private IDataSet createDataset(String datasetFile) throws IOException, DataSetException + { + IDataSet dataSet = datasetCache.get(datasetFile); + if (dataSet == null) + { + URL datasetUrl = getClass().getResource(datasetFile); + if (datasetUrl == null) + { + throw new IllegalArgumentException("Dataset " + datasetFile + " not found"); + } + dataSet = DbUnitUtils.loadDataset(datasetUrl); + datasetCache.put(datasetFile, dataSet); + } + return dataSet; + } + + private void importDataSet(IDataSet dataSet, IDatabaseConnection connection, ITableFilter tableFilter) + throws SQLException, DataSetException, DatabaseUnitException + { + if (dataSet == null) + { + throw new IllegalArgumentException("dataSet is null"); + } + IDataSet orderedDataset = new FilteredDataSet(tableFilter, dataSet); + + log.debug("Tables: {}", ArrayUtils.toString(orderedDataset.getTableNames())); + + // if a sorted dataset is available, use table sequence for sorting + if (truncateDataSet != null) + { + ITableFilter filter = new SequenceTableFilter(truncateDataSet.getTableNames()); + orderedDataset = new FilteredDataSet(filter, dataSet); + } + + if (dataSet != null) + { + DatabaseOperation.INSERT.execute(connection, orderedDataset); + } + + } + + /** + * @param connection + * @param tableFilter + * @throws SQLException + * @throws DataSetException + * @throws DatabaseUnitException + */ + private void truncateAll(IDatabaseConnection connection, ITableFilter tableFilter) throws SQLException, + DataSetException, DatabaseUnitException + { + if (truncateDataSet == null) + { + log.debug("Generating sorted dataset for initial cleanup"); + IDataSet unsortedDataSet = connection.createDataSet(); + + ITableFilter filter = new DatabaseSequenceFilter(connection, new FilteredDataSet( + tableFilter, + unsortedDataSet).getTableNames()); + truncateDataSet = new FilteredDataSet(tableFilter, new FilteredDataSet(filter, unsortedDataSet)); + log.debug("Sorted dataset generated"); + } + + log.debug("Tables truncateDataSet: {}", ArrayUtils.toString(truncateDataSet.getTableNames())); + if (truncateDataSet != null) + { + DatabaseOperation.DELETE_ALL.execute(connection, truncateDataSet); + } + } + + @SuppressWarnings("unchecked") + protected DataSource getDatasource(String name) + { + if (StringUtils.isEmpty(name)) + { + Map<String, DataSource> dsMap = applicationContext.getBeansOfType(DataSource.class); + if (dsMap == null || dsMap.size() != 1) + { + throw new RuntimeException( + "Unable to find a datasource in spring applicationContext, please specify the datasource bean name " + + "using the \"datasource\" attribute of @DbUnitConfiguration"); + } + return dsMap.values().iterator().next(); + } + return (DataSource) applicationContext.getBean(name); + } + +} Property changes on: trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/AbstractDbUnitTestNGSpringContextTests.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Modified: trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/DbUnitTestCase.java =================================================================== --- trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/DbUnitTestCase.java 2008-01-08 09:25:06 UTC (rev 517) +++ trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/DbUnitTestCase.java 2008-01-08 09:26:20 UTC (rev 518) @@ -54,8 +54,10 @@ /** * @author fgiust * @version $Id$ + * @deprecated use {@link AbstractDbUnitTestNGSpringContextTests} */ @Test +@Deprecated public class DbUnitTestCase extends SpringTestCase { @@ -134,8 +136,7 @@ } this.sessionFactory = sfbeans.get(sfbeans.keySet().iterator().next()); - TransactionSynchronizationManager.bindResource(this.sessionFactory, new SessionHolder(this - .sessionFactory + TransactionSynchronizationManager.bindResource(this.sessionFactory, new SessionHolder(this.sessionFactory .openSession())); } @@ -188,7 +189,7 @@ { // close open hibernate sessions, mimic the OpenSessionInViewFilter // close open hibernate sessions, mimic the OpenSessionInViewFilter - if (TransactionSynchronizationManager.hasResource(this.sessionFactory)) + if (TransactionSynchronizationManager.hasResource(this.sessionFactory)) { TransactionSynchronizationManager.unbindResource(this.sessionFactory); } Modified: trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/GenericsDbUnitTestCase.java =================================================================== --- trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/GenericsDbUnitTestCase.java 2008-01-08 09:25:06 UTC (rev 517) +++ trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/GenericsDbUnitTestCase.java 2008-01-08 09:26:20 UTC (rev 518) @@ -20,6 +20,7 @@ import org.apache.commons.lang.ClassUtils; import org.apache.commons.lang.StringUtils; import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; /** @@ -29,7 +30,10 @@ * from Spring is made available through the <code>instance</code> protected field. * @author fgiust * @version $Id$ + * @deprecated use {@link AbstractDbUnitTestNGSpringContextTests} */ +@Test +@Deprecated public class GenericsDbUnitTestCase<D> extends DbUnitTestCase { Modified: trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/SpringTestCase.java =================================================================== --- trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/SpringTestCase.java 2008-01-08 09:25:06 UTC (rev 517) +++ trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/SpringTestCase.java 2008-01-08 09:26:20 UTC (rev 518) @@ -28,8 +28,10 @@ * Base class for running spring-based tests. * @author fgiust * @version $Revision $ ($Author $) + * @deprecated {@link org.springframework.test.context.testng.AbstractTestNGSpringContextTests} */ @Test +@Deprecated public abstract class SpringTestCase { Modified: trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/utils/DateAssert.java =================================================================== --- trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/utils/DateAssert.java 2008-01-08 09:25:06 UTC (rev 517) +++ trunk/openutils-testing-testng/src/main/java/it/openutils/testing/testng/utils/DateAssert.java 2008-01-08 09:26:20 UTC (rev 518) @@ -16,7 +16,9 @@ * Utility methods for checking dates in unit tests. * @author fgiust * @version $Id$ + * @deprecated use {@link it.openutils.testing.DateAssert} */ +@Deprecated public final class DateAssert { Modified: trunk/openutils-testing-testng-dwr/pom.xml =================================================================== --- trunk/openutils-testing-testng-dwr/pom.xml 2008-01-08 09:25:06 UTC (rev 517) +++ trunk/openutils-testing-testng-dwr/pom.xml 2008-01-08 09:26:20 UTC (rev 518) @@ -13,6 +13,26 @@ <description>openutils test utils for dwr</description> <dependencies> <dependency> + <groupId>net.sourceforge.openutils</groupId> + <artifactId>openutils-testing</artifactId> + <version>2.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <version>${spring.version}</version> + <exclusions> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.4.3</version> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |