[hibernate-commits] Hibernate SVN: r19822 - in core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle: testing and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Jun 24 14:44:42 EDT 2010


Author: steve.ebersole at jboss.com
Date: 2010-06-24 14:44:42 -0400 (Thu, 24 Jun 2010)
New Revision: 19822

Added:
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixConvention.java
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixPlugin.java
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNode.java
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNodeProvider.java
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixTestingPlugin.java
Removed:
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IntegrationTestPlugin.java
Modified:
   core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IvyResolutionHelper.java
Log:
split processing of matrix databases and creating of matrix testing objects into separate plugins

Added: core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixConvention.java
===================================================================
--- core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixConvention.java	                        (rev 0)
+++ core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixConvention.java	2010-06-24 18:44:42 UTC (rev 19822)
@@ -0,0 +1,47 @@
+package org.hibernate.gradle.testing.database;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import groovy.lang.Closure;
+import org.gradle.util.ConfigureUtil;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class DatabaseMatrixConvention {
+	private final DatabaseMatrixPlugin plugin;
+	private final Configuration configuration = new Configuration();
+
+	public DatabaseMatrixConvention(DatabaseMatrixPlugin plugin) {
+		this.plugin = plugin;
+	}
+
+	/**
+	 * Allows the user access to define where we should look for database configs
+	 *
+	 * @param closure The configuration closure
+	 */
+	public void databases(Closure closure) {
+		ConfigureUtil.configure( closure, configuration );
+		for ( Object baseDir : configuration.baseDirectories ) {
+			plugin.applyDatabaseDirectories( baseDir );
+		}
+	}
+
+	private static class Configuration {
+		List<Object> baseDirectories = new ArrayList<Object>();
+
+		public void baseDir(Object directory) {
+			baseDirectories.add( directory );
+		}
+
+		public void baseDirs(Object... directories) {
+			this.baseDirectories.addAll( Arrays.asList( directories ) );
+		}
+	}
+}

Added: core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixPlugin.java
===================================================================
--- core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixPlugin.java	                        (rev 0)
+++ core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixPlugin.java	2010-06-24 18:44:42 UTC (rev 19822)
@@ -0,0 +1,128 @@
+package org.hibernate.gradle.testing.database;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gradle.api.Plugin;
+import org.gradle.api.Project;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.file.FileCollection;
+import org.gradle.api.internal.artifacts.dependencies.DefaultSelfResolvingDependency;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.hibernate.gradle.testing.matrix.MatrixNode;
+import org.hibernate.gradle.testing.matrix.MatrixNodeProvider;
+import org.hibernate.gradle.util.IvyResolutionHelper;
+import org.hibernate.gradle.util.Jdk;
+import org.hibernate.gradle.util.ResolutionException;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class DatabaseMatrixPlugin implements Plugin<Project>, MatrixNodeProvider {
+	private static final Logger log = LoggerFactory.getLogger( DatabaseMatrixPlugin.class );
+
+	private Project project;
+	private IvyResolutionHelper ivyResolutionHelper;
+	private List<MatrixNode> matrixNodes = new ArrayList<MatrixNode>();
+
+	public void apply(Project project) {
+		this.project = project;
+		this.ivyResolutionHelper = new IvyResolutionHelper( project );
+
+		project.getConvention().getPlugins().put( "databases", new DatabaseMatrixConvention( this ) );
+	}
+
+
+	/*package*/ void applyDatabaseDirectories(Object databasesBaseDirObject) {
+		final File databasesBaseDir = project.file( databasesBaseDirObject );
+		for ( File entry : databasesBaseDir.listFiles() ) {
+			if ( entry.isDirectory() ) {
+				applyPossibleDatabaseDirectory( entry );
+			}
+		}
+	}
+
+	private void applyPossibleDatabaseDirectory(final File databaseDir) {
+		final String databaseName = databaseDir.getName();
+		log.debug( "Checking potential database directory : {}", databaseName );
+
+		final Configuration configuration = prepareJdbcDependencies( databaseDir );
+		if ( configuration == null ) {
+			return;
+		}
+		configuration.setVisible( true );
+		configuration.setDescription( "The [" + databaseName + "] JDBC dependency configuration" );
+
+		final File resourcesDir = new File( databaseDir, "resources" );
+		if ( resourcesDir.isDirectory() && resourcesDir.exists() ) {
+			configuration.addDependency(
+					new DefaultSelfResolvingDependency( project.files( resourcesDir ) )
+			);
+		}
+
+		matrixNodes.add(
+				new MatrixNode() {
+					public String getName() {
+						return databaseName;
+					}
+
+					public Configuration getTestingRuntimeConfiguration() {
+						return configuration;
+					}
+
+					public Jdk getTestingRuntimeJdk() {
+						return null;
+					}
+				}
+		);
+	}
+
+	private Configuration prepareJdbcDependencies(File databaseDir) {
+		final String databaseName = databaseDir.getName();
+
+		final File ivyXml = new File( databaseDir, "ivy.xml" );
+		if ( ivyXml.exists() && ivyXml.isFile() ) {
+			try {
+				return ivyResolutionHelper.resolve( ivyXml, databaseName );
+			}
+			catch ( ResolutionException e ) {
+				log.info( "Skipping database '{}' due to problems resolving dependencies", databaseDir.getName() );
+			}
+		}
+
+		final File jdbcDir = new File( databaseDir, "jdbc" );
+		if ( jdbcDir.exists() && jdbcDir.isDirectory() ) {
+			File[] jdbcDirFiles = jdbcDir.listFiles();
+			if ( jdbcDirFiles == null || jdbcDirFiles.length == 0 ) {
+				log.warn( "Found 'jdbc' directory, but no entries" );
+			}
+			else {
+				return createSelfContainedConfiguration( jdbcDir, databaseName );
+			}
+		}
+
+		log.info(
+				"Skipping directory from database processing [{}]; could not locate 'ivy.xml' nor 'jdbc' directory",
+				databaseDir.getAbsolutePath()
+		);
+
+		return null;
+	}
+
+	private Configuration createSelfContainedConfiguration(File directory, String configurationName) {
+		DefaultSelfResolvingDependency dependency =
+				new DefaultSelfResolvingDependency( project.files( (File[]) directory.listFiles() ) );
+		Configuration configuration = ivyResolutionHelper.getOrCreateConfiguration( configurationName );
+		configuration.addDependency( dependency );
+		return configuration;
+	}
+
+	public List<MatrixNode> getMatrixNodes() {
+		return matrixNodes;
+	}
+}

Added: core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNode.java
===================================================================
--- core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNode.java	                        (rev 0)
+++ core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNode.java	2010-06-24 18:44:42 UTC (rev 19822)
@@ -0,0 +1,25 @@
+package org.hibernate.gradle.testing.matrix;
+
+import java.io.File;
+
+import org.gradle.api.artifacts.Configuration;
+
+import org.hibernate.gradle.util.Jdk;
+
+/**
+ * Describes the various pieces of information being contributed to the matrix by a given node.
+ *
+ * @author Steve Ebersole
+ */
+public interface MatrixNode {
+	/**
+	 * Get the name of this node.
+	 *
+	 * @return The node.
+	 */
+	public String getName();
+
+	public Configuration getTestingRuntimeConfiguration();
+
+	public Jdk getTestingRuntimeJdk();
+}

Added: core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNodeProvider.java
===================================================================
--- core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNodeProvider.java	                        (rev 0)
+++ core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNodeProvider.java	2010-06-24 18:44:42 UTC (rev 19822)
@@ -0,0 +1,12 @@
+package org.hibernate.gradle.testing.matrix;
+
+import java.util.List;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public interface MatrixNodeProvider {
+	public List<MatrixNode> getMatrixNodes();
+}

Added: core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixTestingPlugin.java
===================================================================
--- core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixTestingPlugin.java	                        (rev 0)
+++ core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixTestingPlugin.java	2010-06-24 18:44:42 UTC (rev 19822)
@@ -0,0 +1,163 @@
+package org.hibernate.gradle.testing.matrix;
+
+import java.io.File;
+import java.util.List;
+
+import org.gradle.api.Plugin;
+import org.gradle.api.Project;
+import org.gradle.api.Task;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.file.FileCollection;
+import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.tasks.SourceSet;
+import org.gradle.api.tasks.SourceSetContainer;
+import org.gradle.api.tasks.testing.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.gradle.api.plugins.JavaPlugin.COMPILE_CONFIGURATION_NAME;
+import static org.gradle.api.plugins.JavaPlugin.RUNTIME_CONFIGURATION_NAME;
+import static org.gradle.api.plugins.JavaPlugin.TEST_TASK_NAME;
+
+/**
+ * TODO : 1) add a base configuration of common attribute across all matrix node tasks (convention)
+ * TODO: 2) somehow allow applying just a single database to a project (non matrix testing).
+ *
+ * @author Steve Ebersole
+ */
+public class MatrixTestingPlugin implements Plugin<Project> {
+	private static final Logger log = LoggerFactory.getLogger( MatrixTestingPlugin.class );
+
+	public static final String MATRIX_COMPILE_CONFIG_NAME = "matrixCompile";
+	public static final String MATRIX_RUNTIME_CONFIG_NAME = "matrixRuntime";
+	public static final String MATRIX_TASK_NAME = "matrix";
+	public static final String MATRIX_SOURCE_SET_NAME = "matrix";
+
+	private Project project;
+
+	private Configuration matrixCompileConfig;
+	private Configuration matrixRuntimeConfig;
+
+	private Task matrixTask;
+
+	private SourceSet matrixSourceSet;
+
+	public void apply(Project project) {
+		this.project = project;
+
+		matrixCompileConfig = prepareCompileConfiguration();
+		matrixRuntimeConfig = prepareRuntimeConfiguration();
+
+		matrixSourceSet = prepareSourceSet();
+
+		// create a "grouping task" for all the matrix nodes
+		matrixTask = project.getTasks().add( MATRIX_TASK_NAME );
+
+		generateNodes();
+	}
+
+	private Configuration prepareCompileConfiguration() {
+		return project.getConfigurations().add( MATRIX_COMPILE_CONFIG_NAME )
+				.setVisible( true )
+				.setTransitive( false )
+				.setDescription( "Dependencies used to compile the matrix tests" )
+				.extendsFrom( project.getConfigurations().getByName( COMPILE_CONFIGURATION_NAME ) );
+	}
+
+	private Configuration prepareRuntimeConfiguration() {
+		return project.getConfigurations().add( MATRIX_RUNTIME_CONFIG_NAME )
+				.setVisible( true )
+				.setTransitive( true )
+				.setDescription( "Dependencies (baseline) used to run the matrix tests" )
+				.extendsFrom( matrixCompileConfig )
+				.extendsFrom( project.getConfigurations().getByName( RUNTIME_CONFIGURATION_NAME ) );
+	}
+
+	private SourceSet prepareSourceSet() {
+		final SourceSetContainer sourceSets = project.getConvention().getPlugin( JavaPluginConvention.class ).getSourceSets();
+		SourceSet sourceSet = sourceSets.findByName( MATRIX_SOURCE_SET_NAME );
+		if ( sourceSet == null ) {
+			sourceSet = sourceSets.add( MATRIX_SOURCE_SET_NAME );
+		}
+
+		final SourceSet mainSourceSet = sourceSets.getByName( SourceSet.MAIN_SOURCE_SET_NAME );
+		sourceSet.setCompileClasspath( mainSourceSet.getClasses().plus( matrixCompileConfig ) );
+		sourceSet.setRuntimeClasspath( mainSourceSet.getClasses().plus( sourceSet.getClasses() ).plus( matrixRuntimeConfig ) );
+
+		final SourceSet unitTestSourceSet = sourceSets.getByName( SourceSet.TEST_SOURCE_SET_NAME );
+		sourceSet.setClassesDir( unitTestSourceSet.getClassesDir() );
+
+		return sourceSet;
+	}
+
+	private void generateNodes() {
+		// For now we just hard code this to locate the databases processed by
+		// org.hibernate.gradle.testing.database.DatabaseMatrixPlugin.  But long term would be much better to
+		// abstract this idea via the MatrixNode/MatrixNodeProvider interfaces; this would allow the jvm variance
+		// needed for jdbc3/jdbc4 testing for example.  Not to mention its much more generally applicable
+		//
+		// Also the notion that the plugin as a MatrixNodeProducer might not be appropriate.  probably a split there
+		// is in order too (config producer and jvm producer and somehow they get wired into a matrix).
+		//
+		// but again this is just a start.
+		List<MatrixNode> matrixNodes = locateMatrixNodes();
+
+		for ( MatrixNode node : matrixNodes ) {
+			Task nodeTask = prepareNodeTask( node );
+			matrixTask.dependsOn( nodeTask );
+		}
+	}
+
+	private List<MatrixNode> locateMatrixNodes() {
+		Project project = this.project;
+		do {
+			for ( Plugin plugin : project.getPlugins() ) {
+				if ( MatrixNodeProvider.class.isInstance( plugin ) ) {
+					return ( (MatrixNodeProvider) plugin ).getMatrixNodes();
+				}
+			}
+			project = project.getParent();
+		} while ( project != null );
+
+		return null;
+	}
+
+
+	private static final String[] INTG_TEST_INCLUDES = new String[] {
+			"**/org/hibernate/test/**",
+			"**/org/hibernate/ejb/test/**"
+	};
+
+	private Task prepareNodeTask(MatrixNode node) {
+		final Test nodeTask = project.getTasks().add( MATRIX_TASK_NAME + '_' + node.getName(), Test.class );
+		nodeTask.setDescription( "Runs the matrix against " + node.getName() );
+
+		FileCollection classpath = node.getTestingRuntimeConfiguration()
+				.plus( matrixRuntimeConfig )
+				.plus( matrixSourceSet.getRuntimeClasspath() );
+		nodeTask.setClasspath( classpath );
+		nodeTask.setTestClassesDir( matrixSourceSet.getClassesDir() );
+		nodeTask.getTestSrcDirs().addAll( matrixSourceSet.getJava().getSrcDirs() );
+
+		final File baseOutputDirectory = new File( new File( project.getBuildDir(), "matrix" ), node.getName() );
+		nodeTask.setWorkingDir( baseOutputDirectory );
+		nodeTask.setTestReportDir( new File( baseOutputDirectory, "reports" ) );
+		nodeTask.setTestResultsDir( new File( baseOutputDirectory, "results" ) );
+
+		// todo : to make this more general purpose we would need to expose the Test options via a convention object.
+		// for now we just set the Hibernate specific needs...
+		nodeTask.include( INTG_TEST_INCLUDES );
+
+		final Test unitTestTask = (Test) project.getTasks().findByName( TEST_TASK_NAME );
+		if ( unitTestTask != null ) {
+			nodeTask.dependsOn( unitTestTask );
+			unitTestTask.exclude( INTG_TEST_INCLUDES );
+		}
+		nodeTask.dependsOn( project.getTasks().getByName( matrixSourceSet.getClassesTaskName() ) );
+
+		nodeTask.jvmArgs( "-Xms512m", "-Xmx1024m", "-XX:MaxPermSize=128m" );
+		nodeTask.getSystemProperties().put( "hibernate.test.validatefailureexpected", "true" );
+
+		return nodeTask;
+	}
+}

Deleted: core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IntegrationTestPlugin.java
===================================================================
--- core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IntegrationTestPlugin.java	2010-06-24 18:37:40 UTC (rev 19821)
+++ core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IntegrationTestPlugin.java	2010-06-24 18:44:42 UTC (rev 19822)
@@ -1,215 +0,0 @@
-package org.hibernate.gradle.util;
-
-import java.io.File;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.gradle.api.Plugin;
-import org.gradle.api.Project;
-import org.gradle.api.Task;
-import org.gradle.api.artifacts.Configuration;
-import org.gradle.api.file.FileCollection;
-import org.gradle.api.internal.artifacts.dependencies.DefaultSelfResolvingDependency;
-import org.gradle.api.plugins.JavaPluginConvention;
-import org.gradle.api.tasks.SourceSet;
-import org.gradle.api.tasks.SourceSetContainer;
-import org.gradle.api.tasks.testing.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.gradle.api.plugins.JavaPlugin.COMPILE_CONFIGURATION_NAME;
-import static org.gradle.api.plugins.JavaPlugin.RUNTIME_CONFIGURATION_NAME;
-import static org.gradle.api.plugins.JavaPlugin.TEST_TASK_NAME;
-
-
-/**
- * TODO : would be nice to allow singular configuration of common attributes across all the intgTest_X tasks
- * As it is each would need to be configured individually
- *
- * @author Steve Ebersole
- */
-public class IntegrationTestPlugin implements Plugin<Project> {
-	private static final Logger log = LoggerFactory.getLogger( IntegrationTestPlugin.class );
-
-	public static final String INTG_TEST_TASK_NAME = "intgTest";
-	public static final String INTG_TEST_SOURCE_SET_NAME = "intgTest";
-	public static final String INTG_TEST_COMPILE_CONFIG_NAME = "intgTestCompile";
-	public static final String INTG_TEST_RUNTIME_CONFIG_NAME = "intgTestRuntime";
-
-	private Project project;
-	private IvyResolutionHelper ivyResolutionHelper;
-	private Set<File> databaseDirs = new HashSet<File>();
-
-	private Configuration intgTestCompileConfig;
-	private Configuration intgTestRuntimeConfig;
-	private SourceSet intgTestSourceSet;
-	private Task intgTestGroupTask;
-
-	public void apply(Project project) {
-		this.project = project;
-		this.ivyResolutionHelper = new IvyResolutionHelper( project );
-		this.databaseDirs = new HashSet<File>();
-		applyDatabaseDirectories( new File( project.getRootProject().getProjectDir(), "databases" ) );
-
-		intgTestCompileConfig = prepareCompileConfiguration();
-		intgTestRuntimeConfig = prepareRuntimeConfiguration();
-
-		intgTestSourceSet = prepareSourceSet();
-
-		// create a "grouping task" for all the integration tests in *this* project
-		intgTestGroupTask = project.getTasks().add( INTG_TEST_TASK_NAME );
-
-// todo : handle "extra" / "local" database directories; requires convention object and delayed task generation
-//
-//		project.getGradle().addBuildListener(
-//				new BuildAdapter() {
-//					@Override
-//					public void projectsEvaluated(Gradle gradle) {
-//						finishUp();
-//					}
-//				}
-//		);
-// for now we just use the defaults and finish up immediately
-		finishUp();
-	}
-
-	private SourceSet prepareSourceSet() {
-		final SourceSetContainer sourceSets = project.getConvention().getPlugin( JavaPluginConvention.class ).getSourceSets();
-		SourceSet sourceSet = sourceSets.findByName( INTG_TEST_SOURCE_SET_NAME );
-		if ( sourceSet == null ) {
-			sourceSet = sourceSets.add( INTG_TEST_SOURCE_SET_NAME );
-		}
-//		sourceSet.setCompileClasspath( intgTestCompileConfig );
-//		// this one is not totally accurate as it is missing the specific jdbc drivers.
-//		sourceSet.setRuntimeClasspath( intgTestSourceSet.getClasses().plus( intgTestRuntimeConfig ) );
-
-		final SourceSet mainSourceSet = sourceSets.getByName( SourceSet.MAIN_SOURCE_SET_NAME );
-		sourceSet.setCompileClasspath( mainSourceSet.getClasses().plus( intgTestCompileConfig ) );
-		sourceSet.setRuntimeClasspath( mainSourceSet.getClasses().plus( sourceSet.getClasses() ).plus( intgTestRuntimeConfig ) );
-
-		final SourceSet unitTestSourceSet = sourceSets.getByName( SourceSet.TEST_SOURCE_SET_NAME );
-		sourceSet.setClassesDir( unitTestSourceSet.getClassesDir() );
-
-		return sourceSet;
-	}
-
-	private Configuration prepareCompileConfiguration() {
-		return project.getConfigurations().add( INTG_TEST_COMPILE_CONFIG_NAME )
-				.setVisible( true )
-				.setTransitive( false )
-				.setDescription( "Libraries/dependencies used to compile the integration tests" )
-				.extendsFrom( project.getConfigurations().getByName( COMPILE_CONFIGURATION_NAME ) );
-	}
-
-	private Configuration prepareRuntimeConfiguration() {
-		return project.getConfigurations().add( INTG_TEST_RUNTIME_CONFIG_NAME )
-				.setVisible( true )
-				.setTransitive( true )
-				.setDescription( "Libraries/dependencies used to run the integration tests" )
-				.extendsFrom( intgTestCompileConfig )
-				.extendsFrom( project.getConfigurations().getByName( RUNTIME_CONFIGURATION_NAME ) );
-	}
-
-	private void applyDatabaseDirectories(File databasesBaseDir) {
-		File[] files = databasesBaseDir.listFiles();
-		for ( File file : files ) {
-			log.debug( "Checking potential database directory : {}", file.getName() );
-			if ( !file.isDirectory() ) {
-				continue;
-			}
-			// look for a file named 'ivy.xml' or a directory named 'jdbc' (expected to contain driver-related jars)
-			File ivyXml = new File( file, "ivy.xml" );
-			if ( ivyXml.exists() && ivyXml.isFile() ) {
-				databaseDirs.add( file );
-				continue;
-			}
-			File jdbcDir = new File( file, "jdbc" );
-			if ( jdbcDir.exists() && jdbcDir.isDirectory() ) {
-				// it better have entries also...
-				File[] jdbcDirFiles = jdbcDir.listFiles();
-				if ( jdbcDirFiles == null || jdbcDirFiles.length == 0 ) {
-					log.warn( "Found 'jdbc' directory, but no entries" );
-				}
-				databaseDirs.add( file );
-				continue;
-			}
-			log.info( "Skipping database directory [{}] as no 'ivy.xml' file nor 'jdbc' directory could be found", file.getName() );
-		}
-	}
-
-	private void finishUp() {
-		for ( File databaseDir : databaseDirs ) {
-			processDatabase( databaseDir );
-		}
-	}
-
-	private void processDatabase(File databaseDir) {
-		try {
-			Configuration configuration = prepareJdbcDependencies( databaseDir );
-			configuration.extendsFrom( intgTestRuntimeConfig );
-			Task intgTestTask = prepareTestTask( databaseDir, configuration );
-			intgTestGroupTask.dependsOn( intgTestTask );
-		}
-		catch ( ResolutionException e ) {
-			log.info( "Skipping database '{}' due to problems resolving dependencies", databaseDir.getName() );
-		}
-	}
-
-	private Configuration prepareJdbcDependencies(File databaseDir) {
-		final String databaseName = databaseDir.getName();
-		log.debug( "Starting processing of '{}' database", databaseName );
-		final File ivyXml = new File( databaseDir, "ivy.xml" );
-		if ( ivyXml.exists() && ivyXml.isFile() ) {
-			return ivyResolutionHelper.resolve( ivyXml, databaseName );
-		}
-		else {
-			return createSelfContainedConfiguration( new File( databaseDir, "jdbc" ), databaseName );
-		}
-	}
-
-	private Configuration createSelfContainedConfiguration(File directory, String configurationName) {
-		DefaultSelfResolvingDependency dependency = new DefaultSelfResolvingDependency(
-				project.files( (File[]) directory.listFiles() )
-		);
-		Configuration configuration = ivyResolutionHelper.getOrCreateConfiguration( configurationName );
-		configuration.addDependency( dependency );
-		return configuration;
-	}
-
-	private static final String INTG_TEST_INCLUDES = "**/org/hibernate/test/**";
-
-	private Task prepareTestTask(File databaseDir, Configuration configuration) {
-		final String databaseName = databaseDir.getName();
-		final Test intgTestTask = project.getTasks().add( String.format( "intgTest_%s", databaseName ), Test.class );
-		intgTestTask.setDescription( "Runs the integration tests for " + databaseName );
-
-		final FileCollection classpath = project.files( new File( databaseDir, "resources" ) )
-				.plus( intgTestSourceSet.getRuntimeClasspath() )
-				.plus( configuration );
-		intgTestTask.setClasspath( classpath );
-		intgTestTask.setTestClassesDir( intgTestSourceSet.getClassesDir() );
-		intgTestTask.getTestSrcDirs().addAll( intgTestSourceSet.getJava().getSrcDirs() );
-
-		final File baseOutputDirectory = new File( new File( project.getBuildDir(), "intgTest" ), databaseName );
-		intgTestTask.setWorkingDir( baseOutputDirectory );
-		intgTestTask.setTestReportDir( new File( baseOutputDirectory, "reports" ) );
-		intgTestTask.setTestResultsDir( new File( baseOutputDirectory, "results" ) );
-
-		// todo : to make this more general purpose we would need to expose the Test options via a convention object.
-		// for now we just set the Hibernate specific needs...
-		intgTestTask.include( INTG_TEST_INCLUDES );
-
-		final Test unitTestTask = (Test) project.getTasks().findByName( TEST_TASK_NAME );
-		if ( unitTestTask != null ) {
-			intgTestTask.dependsOn( unitTestTask );
-			unitTestTask.exclude( INTG_TEST_INCLUDES );
-		}
-		intgTestTask.dependsOn( project.getTasks().getByName( intgTestSourceSet.getClassesTaskName() ) );
-
-		intgTestTask.setMaxHeapSize( "1024m" );
-		intgTestTask.getSystemProperties().put( "hibernate.test.validatefailureexpected", "true" );
-
-		return intgTestTask;
-	}
-
-}

Modified: core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IvyResolutionHelper.java
===================================================================
--- core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IvyResolutionHelper.java	2010-06-24 18:37:40 UTC (rev 19821)
+++ core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IvyResolutionHelper.java	2010-06-24 18:44:42 UTC (rev 19822)
@@ -86,9 +86,6 @@
 		Configuration configuration = project.getConfigurations().findByName( configurationName );
 		if ( configuration == null ) {
 			configuration = project.getConfigurations().add( configurationName );
-			configuration.setVisible( true );
-			configuration.setDescription( "The [" + configurationName + "] integration test dependency configuration" );
-			configuration.extendsFrom( project.getConfigurations().getByName( TEST_RUNTIME_CONFIGURATION_NAME ) );
 		}
 		return configuration;
 	}



More information about the hibernate-commits mailing list