Have your considered using the Ant tasks? See http://docs.jboss.org/hibernate/core/3.6/reference/en- US/html/toolsetguide.html#toolsetguide-s1-5 and http://www.gradle.org/0.9- rc-2/docs/userguide/ant.html
The plan is to develop Gradle tasks for for Hibernate as part of Hibernate itself once the Gradle APIs settle down. On Saturday, November 06, 2010, at 05:08 am, Silvio Wangler wrote: > Hi community > > I am trying to write a Gradle task that does the following thing. > > - Exporting JPA annotated Hibernate POJOs to a file > > I have found several links to that issue (e.g. > http://www.beeworks.be/maven-to-gradle-part-2/) but now of them helped me > to solve the problem. My situation is as follows. > > - I am using Spring 3.x and JPA annotations and therefore there is > neither a persistance.xml nor *.hbm.xml because Spring does the > configuration at runtime > > Since I am new to Gradle I tried to do it within a Groovy script as a > 'proof-of-concept' (see listing below). Some parts of the script I would > like to place into the Gradle task but I have some question left. > > - Is there an official task / plugin which solves my problem? > - How can a Gradle task using the declared dependencies of the module? > - Can a Gradle task specific additionals dependencies? In this case I > would add the scannotation jar into the classpath while the task is > executing. > > Any hints are welcome. > > Best regards, > Silvio > > <code> > // use Groovy 1.7.4 or greater > import org.slf4j.Logger; > import org.slf4j.LoggerFactory; > import org.scannotation.* > > @GrabResolver(name = 'jboss', root = ' > https://repository.jboss.org/nexus/content/groups/public/') > @GrabResolver(name = 'spring', root = ' > http://maven.springframework.org/release/') > > @Grapes([ > @Grab(group = 'org.hibernate', module = 'hibernate-core', version = > '3.5.6-FINAL'), > @Grab(group = 'org.hibernate', module = 'hibernate-annotations', version = > '3.5.6-FINAL'), > @Grab(group = 'javax.persistence', module = 'persistence-api', version = > '1.0'), > @Grab(group = 'org.slf4j', module = 'slf4j-simple', version = '1.4.2'), > @Grab(group = 'net.sf.scannotation', module = 'scannotation', version = > '1.0.2') > ]) > > def logger = LoggerFactory.getLogger(getClass()); > > def outputFile = new File('./hockey-game-mysql.sql') > def jarFile = new File('./core/build/libs/core-0.1-SNAPSHOT.jar') > > assert jarFile.exists(): "File does not exist ${jarFile.absolutePath}" > > if (outputFile.exists()) { > logger.info("Detected previously generated SQL file. About to delete > ${outputFile.name}") > outputFile.delete() > } > > this.getClass().classLoader.rootLoader.addURL(jarFile.toURL()) > > URL[] urls = [jarFile.toURL()] as URL[] > AnnotationDB db = new AnnotationDB() > db.scanArchives(urls) > > if (db.annotationIndex[javax.persistence.Entity.class.name] || > db.annotationIndex[javax.persistence.MappedSuperclass.class.name]) { > > def cfg = new org.hibernate.cfg.AnnotationConfiguration() > > def properties = new Properties() > properties['hibernate.format_sql'] = true > properties['hibernate.use_sql_comments'] = true > properties['hibernate.dialect'] = > 'org.hibernate.dialect.MySQL5InnoDBDialect' > > cfg.properties = properties > addClasses(cfg, db.annotationIndex[ > javax.persistence.MappedSuperclass.class.name], logger) > addClasses(cfg, db.annotationIndex[javax.persistence.Entity.class.name], > logger) > > cfg.buildSessionFactory() > > def exporter = new org.hibernate.tool.hbm2ddl.SchemaExport(cfg) > exporter.delimiter = ';' > exporter.format = Boolean.TRUE > exporter.haltOnError = Boolean.TRUE > > exporter.outputFile = outputFile.absolutePath > > exporter.execute(false, false, false, true); > > assert outputFile.text.length() > 0 : 'File is empty' > } > else { > logger.warn('No annotated classes have been found') > } > > private def addClasses(org.hibernate.cfg.AnnotationConfiguration cfg, > Set<String> classNames, logger) { > for (String className: classNames) { > > logger.info "About to add annotated class '$className' to Hibernate > configuration" > > cfg.addAnnotatedClass(getClass().getClassLoader().loadClass(className)) > } > } > <code> --- Steve Ebersole <[email protected]> http://hibernate.org --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email
