Remove old groovy script code
parent
e8e059bc90
commit
a5f7b6ead3
@ -1,27 +0,0 @@
|
||||
# Spring Bootstrap Groovy
|
||||
|
||||
Spring Bootstrap Groovy gives you the quickest possible getting
|
||||
started experience with Spring apps, whether you are writing a web
|
||||
app, a batch job or a standalone java app.
|
||||
|
||||
## Building and Testing
|
||||
|
||||
To avoid problems with classpaths and existing JVM-based build tools,
|
||||
Spring Bootstrap Groovy uses an exec plugin call to launch `groovyc`.
|
||||
You need to have a `sh` on your path along with `groovyc` (2.1.x),
|
||||
`find` and `xargs`. These tools are standard on a Mac or Linux
|
||||
distribution, and available using Cygwin on Windows. Once it is
|
||||
built, the zip file is portable.
|
||||
|
||||
Here are the steps to build and test:
|
||||
|
||||
$ mvn install
|
||||
|
||||
The `spring` executable is then available at
|
||||
`spring-bootstrap-groovy/target/spring-<VERSION>`. There is also a jar
|
||||
file with the Groovy Bootstrap components. The `spring` executable
|
||||
includes jars from `SPRING_HOME` in the classpath so you can run it
|
||||
while you are developing like this
|
||||
|
||||
$ export SPRING_HOME=<spring-bootstrap-groovy>/target
|
||||
$ <spring-bootstrap-groovy>/src/main/scripts/spring App.groovy
|
@ -1,180 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.springframework.bootstrap</groupId>
|
||||
<artifactId>spring-bootstrap-parent</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>spring-bootstrap-groovy</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.bootstrap</groupId>
|
||||
<artifactId>spring-bootstrap</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-web</artifactId>
|
||||
<version>${dependency.springframework.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.groovy</groupId>
|
||||
<artifactId>groovy</artifactId>
|
||||
<version>2.1.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ivy</groupId>
|
||||
<artifactId>ivy</artifactId>
|
||||
<version>2.2.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>grapes</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
<configuration>
|
||||
<filesets>
|
||||
<fileset>
|
||||
<directory>${user.home}/.groovy/grapes</directory>
|
||||
<includes>
|
||||
<include>org.springframework*/**</include>
|
||||
</includes>
|
||||
<followSymlinks>false</followSymlinks>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/groovy</directory>
|
||||
<filtering>true</filtering>
|
||||
<targetPath>../generated-sources/groovy</targetPath>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<!-- Using exec plugin to compile groovy because it needs to be forked
|
||||
cleanly. Only works if sh, find, xargs and groovyc are on PATH -->
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>1.2.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>compile-plugin</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>exec</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<executable>sh</executable>
|
||||
<arguments>
|
||||
<argument>-c</argument>
|
||||
<argument>find target/generated-sources/groovy -name *.groovy |
|
||||
xargs groovyc -d target/classes</argument>
|
||||
</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<inherited>false</inherited>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/descriptor.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-distribution</id>
|
||||
<phase>install</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<compilerId>groovy-eclipse-compiler</compilerId>
|
||||
</configuration>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.groovy</groupId>
|
||||
<artifactId>groovy-eclipse-compiler</artifactId>
|
||||
<version>2.7.0-01</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>**/*Tests.java</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>**/Abstract*.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<!--This plugin's configuration is used to store Eclipse m2e settings
|
||||
only. It has no influence on the Maven build itself. -->
|
||||
<plugin>
|
||||
<groupId>org.eclipse.m2e</groupId>
|
||||
<artifactId>lifecycle-mapping</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<configuration>
|
||||
<lifecycleMappingMetadata>
|
||||
<pluginExecutions>
|
||||
<pluginExecution>
|
||||
<pluginExecutionFilter>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<versionRange>[3.0,)</versionRange>
|
||||
<goals>
|
||||
<goal>testCompile</goal>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
</pluginExecutionFilter>
|
||||
<action>
|
||||
<ignore></ignore>
|
||||
</action>
|
||||
</pluginExecution>
|
||||
</pluginExecutions>
|
||||
</lifecycleMappingMetadata>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<configuration>
|
||||
<delimiters>
|
||||
<delimiter>@@</delimiter>
|
||||
</delimiters>
|
||||
<useDefaultDelimiters>false</useDefaultDelimiters>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
</project>
|
@ -1,30 +0,0 @@
|
||||
<assembly>
|
||||
<id>dist</id>
|
||||
<formats>
|
||||
<format>zip</format>
|
||||
<format>dir</format>
|
||||
</formats>
|
||||
<baseDirectory>spring-${project.version}</baseDirectory>
|
||||
<includeBaseDirectory>true</includeBaseDirectory>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>src/main/scripts</directory>
|
||||
<outputDirectory>bin</outputDirectory>
|
||||
<useDefaultExcludes>true</useDefaultExcludes>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>src/main/resources</directory>
|
||||
<outputDirectory>bin</outputDirectory>
|
||||
<useDefaultExcludes>true</useDefaultExcludes>
|
||||
<filtered>true</filtered>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
<dependencySets>
|
||||
<dependencySet>
|
||||
<includes>
|
||||
<include>org.springframework.bootstrap:spring-bootstrap-groovy:jar:*</include>
|
||||
</includes>
|
||||
<outputDirectory>lib</outputDirectory>
|
||||
</dependencySet>
|
||||
</dependencySets>
|
||||
</assembly>
|
@ -1,52 +0,0 @@
|
||||
package org.springframework.bootstrap.grapes
|
||||
|
||||
@GrabResolver(name='spring-milestone', root='http://repo.springframework.org/milestone')
|
||||
@GrabResolver(name='spring-snapshot', root='http://repo.springframework.org/snapshot')
|
||||
@GrabConfig(systemClassLoader=true)
|
||||
@Grab("org.springframework.bootstrap:spring-bootstrap:@@version@@")
|
||||
@Grab("org.springframework.batch:spring-batch-core:2.2.0.M1")
|
||||
@Grab("org.springframework:spring-context:@@dependency.springframework.version@@")
|
||||
class BatchGrapes {
|
||||
}
|
||||
|
||||
import org.springframework.bootstrap.context.annotation.ConditionalOnMissingBean
|
||||
import org.springframework.bootstrap.CommandLineRunner
|
||||
import org.springframework.batch.core.Job
|
||||
import org.springframework.batch.core.converter.DefaultJobParametersConverter
|
||||
import org.springframework.batch.core.converter.JobParametersConverter
|
||||
import org.springframework.batch.core.launch.JobLauncher
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.util.StringUtils
|
||||
import groovy.util.logging.Log
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnMissingBean(CommandLineRunner)
|
||||
@Log
|
||||
class BatchCommand {
|
||||
|
||||
@Autowired(required=false)
|
||||
private JobParametersConverter converter = new DefaultJobParametersConverter()
|
||||
|
||||
@Autowired
|
||||
private JobLauncher jobLauncher
|
||||
|
||||
@Autowired
|
||||
private Job job
|
||||
|
||||
@Bean
|
||||
CommandLineRunner batchCommandLineRunner() {
|
||||
return new CommandLineRunner() {
|
||||
void run(String... args) {
|
||||
log.info("Running default command line with: ${args}")
|
||||
launchJobFromProperties(StringUtils.splitArrayElementsIntoProperties(args, "="))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void launchJobFromProperties(Properties properties) {
|
||||
jobLauncher.run(job, converter.getJobParameters(properties))
|
||||
}
|
||||
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
package org.springframework.bootstrap.grapes
|
||||
|
||||
@GrabResolver(name='spring-milestone', root='http://repo.springframework.org/milestone')
|
||||
@GrabConfig(systemClassLoader=true)
|
||||
@Grab("org.springframework:spring-jdbc:4.0.0.BOOTSTRAP-SNAPSHOT")
|
||||
@Grab("org.springframework.batch:spring-batch-core:2.2.0.M1")
|
||||
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils
|
||||
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator
|
||||
import javax.annotation.PostConstruct
|
||||
import javax.sql.DataSource
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.core.env.Environment
|
||||
import org.springframework.core.io.ResourceLoader
|
||||
|
||||
@Configuration // TODO: make this conditional
|
||||
class BatchInitializationGrapes {
|
||||
|
||||
@Autowired
|
||||
private DataSource dataSource
|
||||
|
||||
@Autowired
|
||||
private Environment environment
|
||||
|
||||
@Autowired
|
||||
private ResourceLoader resourceLoader
|
||||
|
||||
@PostConstruct
|
||||
protected void initialize() {
|
||||
String platform = org.springframework.batch.support.DatabaseType.fromMetaData(dataSource).toString().toLowerCase()
|
||||
if (platform=="hsql") {
|
||||
platform = "hsqldb"
|
||||
}
|
||||
ResourceDatabasePopulator populator = new ResourceDatabasePopulator()
|
||||
populator.addScript(resourceLoader.getResource("org/springframework/batch/core/schema-${platform}.sql"))
|
||||
populator.setContinueOnError(true)
|
||||
DatabasePopulatorUtils.execute(populator, dataSource)
|
||||
}
|
||||
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
package org.springframework.bootstrap.grapes
|
||||
|
||||
// Spring stuff needs to be on the system classloader apparently (when using @Configuration)
|
||||
@GrabResolver(name='spring-snapshot', root='http://repo.springframework.org/snapshot')
|
||||
@GrabConfig(systemClassLoader=true)
|
||||
@Grab("org.springframework:spring-context:@@dependency.springframework.version@@")
|
||||
@Grab("org.springframework.bootstrap:spring-bootstrap:@@version@@")
|
||||
@GrabExclude("commons-logging:commons-logging")
|
||||
@Grab("org.slf4j:jcl-over-slf4j:1.6.1")
|
||||
@Grab("org.slf4j:slf4j-jdk14:1.6.1")
|
||||
class BootstrapGrapes {
|
||||
}
|
||||
|
||||
import org.springframework.bootstrap.context.annotation.EnableAutoConfiguration
|
||||
import org.springframework.context.annotation.Configuration
|
||||
|
||||
@Configuration
|
||||
// @EnableAutoConfiguration
|
||||
class BootstrapAutoConfiguration {
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
package org.springframework.bootstrap.grapes
|
||||
|
||||
import org.springframework.core.type.StandardAnnotationMetadata
|
||||
import org.springframework.util.ClassUtils
|
||||
import org.springframework.core.type.classreading.SimpleMetadataReaderFactory
|
||||
import groovy.util.logging.Log
|
||||
|
||||
@GrabResolver(name='spring-snapshot', root='http://repo.springframework.org/snapshot')
|
||||
@GrabConfig(systemClassLoader=true)
|
||||
@Grab("org.springframework:spring-core:4.0.0.BOOTSTRAP-SNAPSHOT")
|
||||
@GrabExclude("commons-logging:commons-logging")
|
||||
@Grab("org.slf4j:jcl-over-slf4j:1.6.1")
|
||||
@Grab("org.slf4j:slf4j-jdk14:1.6.1")
|
||||
@Log
|
||||
class Dependencies {
|
||||
|
||||
static List<String> defaults() {
|
||||
return ["org.springframework.bootstrap.grapes.BootstrapGrapes"]
|
||||
}
|
||||
|
||||
static List<String> dependencies(Collection<String> configs) {
|
||||
|
||||
def result = []
|
||||
if (isWeb(configs)) {
|
||||
log.info("Adding web dependencies.")
|
||||
result.addAll(web())
|
||||
}
|
||||
|
||||
if (isBatch(configs)) {
|
||||
log.info("Adding batch dependencies.")
|
||||
result.addAll(batch())
|
||||
result << "org.springframework.bootstrap.grapes.BatchCommand"
|
||||
result << "org.springframework.bootstrap.grapes.BatchInitializationGrapes"
|
||||
}
|
||||
|
||||
if (isHadoop(configs)) {
|
||||
log.info("Adding info dependencies.")
|
||||
result.addAll(hadoop())
|
||||
result << "org.springframework.bootstrap.grapes.HadoopContext"
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
}
|
||||
|
||||
static String[] web() {
|
||||
def result = []
|
||||
result << "org.springframework.bootstrap.grapes.WebGrapes"
|
||||
if (!isEmbeddedServerAvailable()) { result << "org.springframework.bootstrap.grapes.TomcatGrapes" }
|
||||
return result
|
||||
}
|
||||
|
||||
static String[] batch() {
|
||||
def result = []
|
||||
result << "org.springframework.bootstrap.grapes.BatchGrapes"
|
||||
return result
|
||||
}
|
||||
|
||||
static String[] hadoop() {
|
||||
def result = []
|
||||
result << "org.springframework.bootstrap.grapes.HadoopGrapes"
|
||||
return result
|
||||
}
|
||||
|
||||
static boolean isWeb(Collection<String> configs) {
|
||||
SimpleMetadataReaderFactory factory = new SimpleMetadataReaderFactory()
|
||||
return configs.any { config ->
|
||||
def meta = factory.getMetadataReader(config).getAnnotationMetadata()
|
||||
meta.hasAnnotation("org.springframework.stereotype.Controller") || meta.hasAnnotation("org.springframework.web.servlet.config.annotation.EnableWebMvc")
|
||||
}
|
||||
}
|
||||
|
||||
static boolean isHadoop(Collection<String> configs) {
|
||||
SimpleMetadataReaderFactory factory = new SimpleMetadataReaderFactory()
|
||||
return configs.any { config ->
|
||||
config.contains("Hadoop")
|
||||
}
|
||||
}
|
||||
|
||||
static boolean isBatch(Collection<String> configs) {
|
||||
SimpleMetadataReaderFactory factory = new SimpleMetadataReaderFactory()
|
||||
return configs.any { config ->
|
||||
def meta = factory.getMetadataReader(config).getAnnotationMetadata()
|
||||
meta.hasAnnotation("org.springframework.batch.core.configuration.annotation.EnableBatchProcessing")
|
||||
}
|
||||
}
|
||||
|
||||
static boolean isEmbeddedServerAvailable() {
|
||||
return ClassUtils.isPresent("org.apache.catalina.startup.Tomcat") || ClassUtils.isPresent("org.mortbay.jetty.Server")
|
||||
}
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package org.springframework.bootstrap.grapes
|
||||
|
||||
@GrabConfig(systemClassLoader=true)
|
||||
@Grab("org.springframework.data:spring-data-hadoop:1.0.0.RELEASE")
|
||||
@Grab("org.springframework.bootstrap:spring-bootstrap:@@version@@")
|
||||
@Grab("org.springframework:spring-context:4.0.0.BOOTSTRAP-SNAPSHOT")
|
||||
@Grab("org.apache.hadoop:hadoop-examples:1.0.4")
|
||||
@GrabExclude("org.mortbay.jetty:sevlet-api-2.5")
|
||||
@GrabExclude("org.mortbay.jetty:jetty")
|
||||
@GrabExclude("org.mortbay.jetty:jetty-util")
|
||||
@GrabExclude("org.mortbay.jetty:jsp-2.1")
|
||||
@GrabExclude("org.mortbay.jetty:jsp-api-2.1")
|
||||
@GrabExclude("tomcat:jasper-runtime")
|
||||
@GrabExclude("tomcat:jasper-compiler")
|
||||
class HadoopGrapes {
|
||||
}
|
||||
|
||||
import org.springframework.bootstrap.context.annotation.ConditionalOnMissingBean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.context.annotation.ImportResource
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnMissingBean(org.apache.hadoop.conf.Configuration)
|
||||
@ImportResource("hadoop-context.xml")
|
||||
class HadoopContext {
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
package org.springframework.bootstrap.grapes
|
||||
|
||||
@GrabConfig(systemClassLoader=true)
|
||||
// Grab some Tomcat dependencies
|
||||
@Grab("org.apache.tomcat.embed:tomcat-embed-core:7.0.32")
|
||||
// JULI logging has sensible defaults in JAVA_HOME, so no need for user to create it
|
||||
@Grab("org.apache.tomcat.embed:tomcat-embed-logging-juli:7.0.32")
|
||||
class TomcatGrapes {
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
package org.springframework.bootstrap.grapes
|
||||
|
||||
@Grab("org.springframework:spring-webmvc:4.0.0.BOOTSTRAP-SNAPSHOT")
|
||||
class WebGrapes {
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:c="http://www.springframework.org/schema/c"
|
||||
xmlns:p="http://www.springframework.org/schema/p"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:hdp="http://www.springframework.org/schema/hadoop"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
|
||||
http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd">
|
||||
|
||||
|
||||
<hdp:resource-loader id="hadoopResourceLoader" />
|
||||
|
||||
<hdp:configuration>
|
||||
fs.default.name=${hd.fs:hdfs://localhost:9000}
|
||||
</hdp:configuration>
|
||||
|
||||
<bean id="defaultResourceLoaders" class="org.springframework.data.hadoop.fs.CustomResourceLoaderRegistrar" p:loader-ref="hadoopResourceLoader" />
|
||||
|
||||
</beans>
|
@ -1,100 +0,0 @@
|
||||
import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer
|
||||
import org.codehaus.groovy.ast.ClassHelper
|
||||
import groovy.util.logging.Log
|
||||
|
||||
def bootstrap = 'org.springframework.bootstrap.grapes.BootstrapGrapes' as Class
|
||||
|
||||
void addImport(module, path) {
|
||||
def name = path.lastIndexOf('.').with {it != -1 ? path[it+1..<path.length()] : path}
|
||||
if (name=="*") {
|
||||
// Doesn't work?
|
||||
name = path.lastIndexOf('.').with {path[0..<it] }
|
||||
module.addStarImport(name, [])
|
||||
} else {
|
||||
module.addImport(name, ClassHelper.make(path), [])
|
||||
}
|
||||
}
|
||||
|
||||
withConfig(configuration) {
|
||||
|
||||
ast(Log)
|
||||
|
||||
imports {
|
||||
normal 'javax.sql.DataSource'
|
||||
normal 'org.springframework.stereotype.Component'
|
||||
normal 'org.springframework.stereotype.Controller'
|
||||
normal 'org.springframework.stereotype.Repository'
|
||||
normal 'org.springframework.stereotype.Service'
|
||||
normal 'org.springframework.beans.factory.annotation.Autowired'
|
||||
normal 'org.springframework.beans.factory.annotation.Value'
|
||||
normal 'org.springframework.context.annotation.Import'
|
||||
normal 'org.springframework.context.annotation.ImportResource'
|
||||
normal 'org.springframework.context.annotation.Profile'
|
||||
normal 'org.springframework.context.annotation.Scope'
|
||||
normal 'org.springframework.context.annotation.Configuration'
|
||||
normal 'org.springframework.context.annotation.Bean'
|
||||
normal 'org.springframework.bootstrap.CommandLineRunner'
|
||||
}
|
||||
|
||||
def dependencySource = "org.springframework.bootstrap.grapes.Dependencies" as Class // TODO: maybe strategise this
|
||||
|
||||
inline(phase:'CONVERSION') { source, context, classNode ->
|
||||
|
||||
def module = source.getAST()
|
||||
|
||||
if (classNode.name.contains("Hadoop")) {
|
||||
def hadoop = dependencySource.hadoop() as Class[]
|
||||
['org.springframework.data.hadoop.mapreduce.JobRunner',
|
||||
'org.springframework.data.hadoop.mapreduce.JobFactoryBean'
|
||||
].each { path -> addImport(module, path) }
|
||||
module.addImport("HadoopConfiguration", ClassHelper.make("org.apache.hadoop.conf.Configuration"), [])
|
||||
}
|
||||
|
||||
classNode.annotations.each {
|
||||
|
||||
def name = it.classNode.name
|
||||
if (name=='Controller' || name=='EnableWebMvc') {
|
||||
def web = dependencySource.web() as Class[]
|
||||
['org.springframework.web.bind.annotation.RequestBody',
|
||||
'org.springframework.web.bind.annotation.RequestParam',
|
||||
'org.springframework.web.bind.annotation.PathVariable',
|
||||
'org.springframework.web.bind.annotation.RequestHeader',
|
||||
'org.springframework.web.bind.annotation.RequestMethod',
|
||||
'org.springframework.web.bind.annotation.RequestBody',
|
||||
'org.springframework.web.bind.annotation.ResponseBody',
|
||||
'org.springframework.web.bind.annotation.ResponseStatus',
|
||||
'org.springframework.web.bind.annotation.RequestMapping',
|
||||
'org.springframework.web.bind.annotation.ExceptionHandler',
|
||||
'org.springframework.web.bind.annotation.ModelAttribute',
|
||||
'org.springframework.web.bind.annotation.CookieValue',
|
||||
'org.springframework.web.servlet.config.annotation.EnableWebMvc',
|
||||
'org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry',
|
||||
'org.springframework.web.servlet.config.annotation.ViewControllerRegistry',
|
||||
'org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter'].each { path -> addImport(module, path) }
|
||||
}
|
||||
|
||||
if (name=='EnableBatchProcessing') {
|
||||
def batch = dependencySource.batch() as Class[]
|
||||
['org.springframework.batch.repeat.RepeatStatus',
|
||||
'org.springframework.batch.core.scope.context.ChunkContext',
|
||||
'org.springframework.batch.core.step.tasklet.Tasklet',
|
||||
'org.springframework.batch.core.configuration.annotation.StepScope',
|
||||
'org.springframework.batch.core.configuration.annotation.JobBuilderFactory',
|
||||
'org.springframework.batch.core.configuration.annotation.StepBuilderFactory',
|
||||
'org.springframework.batch.core.configuration.annotation.EnableBatchProcessing',
|
||||
'org.springframework.batch.core.Step',
|
||||
'org.springframework.batch.core.StepExecution',
|
||||
'org.springframework.batch.core.StepContribution',
|
||||
'org.springframework.batch.core.Job',
|
||||
'org.springframework.batch.core.JobExecution',
|
||||
'org.springframework.batch.core.JobParameter',
|
||||
'org.springframework.batch.core.JobParameters',
|
||||
'org.springframework.batch.core.launch.JobLauncher',
|
||||
'org.springframework.batch.core.converter.DefaultJobParametersConverter'].each { path -> addImport(module, path) }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
##############################################################################
|
||||
## ##
|
||||
## Groovy Classloading Configuration ##
|
||||
## ##
|
||||
##############################################################################
|
||||
|
||||
##
|
||||
## $Revision$ $Date$
|
||||
##
|
||||
## Note: do not add classes from java.lang here. No rt.jar and on some
|
||||
## platforms no tools.jar
|
||||
##
|
||||
## See http://groovy.codehaus.org/api/org/codehaus/groovy/tools/LoaderConfiguration.html
|
||||
## for the file format
|
||||
|
||||
# load required libraries
|
||||
load !{groovy.home}/lib/a*.jar
|
||||
load !{groovy.home}/lib/b*.jar
|
||||
load !{groovy.home}/lib/c*.jar
|
||||
load !{groovy.home}/lib/g*.jar
|
||||
load !{groovy.home}/lib/h*.jar
|
||||
load !{groovy.home}/lib/i*.jar
|
||||
load !{groovy.home}/lib/j*.jar
|
||||
load !{groovy.home}/lib/q*.jar
|
||||
load !{groovy.home}/lib/t*.jar
|
||||
load !{groovy.home}/lib/x*.jar
|
||||
|
||||
# load user specific libraries
|
||||
load !{user.home}/.groovy/lib/*.jar
|
||||
|
||||
# tools.jar for ant tasks
|
||||
load ${tools.jar}
|
||||
|
@ -1,163 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false;
|
||||
darwin=false;
|
||||
case "`uname`" in
|
||||
CYGWIN*)
|
||||
cygwin=true
|
||||
;;
|
||||
|
||||
Darwin*)
|
||||
darwin=true
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$SPRING_HOME" == "" ]; then
|
||||
SPRING_HOME=`cd "$(dirname $0)"/.. && pwd`
|
||||
fi
|
||||
SPRING_BIN=$(dirname $0)
|
||||
|
||||
export GROOVY_CONF="${SPRING_BIN}"/groovy.conf
|
||||
SPRING_HANDLER=auto
|
||||
|
||||
TARGETDIR=target/classes
|
||||
if [ -f build.gradle ]; then
|
||||
TARGETDIR=build/classes/main
|
||||
fi
|
||||
mkdir -p "${TARGETDIR%/}"
|
||||
|
||||
function find_classfile {
|
||||
classname="$( echo ${1%%.groovy} | sed -e 's,.*/,,')"
|
||||
package="$( grep ^package ${1} | sed -e 's,package\s,,g' -e 's,;,,g' -e 's,\.,/,g')"
|
||||
if [ "${package}" != "" ]; then package="${package}/"; fi
|
||||
for f in $( find "${TARGETDIR}" -name "${classname}.class" ); do
|
||||
if [ "${f}" == "${TARGETDIR}/${package}${classname}.class" ]; then
|
||||
echo $f; return 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function is_compile_needed {
|
||||
config=$1
|
||||
STATOPTS="-c %X"
|
||||
if $darwin; then STATOPTS="-f %Dm"; fi
|
||||
# Compile .groovy files if necessary
|
||||
if [ ! -f ${config} ]; then
|
||||
echo "File ${config} does not exist. Did you point at the wrong file?"
|
||||
exit 3
|
||||
else
|
||||
classfile=$( find_classfile ${config} )
|
||||
if [ ! -f "${classfile}" -o $(stat "${STATOPTS}" ${config}) -gt $(stat "${STATOPTS}" ${classfile} 2>/dev/null || echo 0) ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
function is_option {
|
||||
echo "$1" | grep -q "^--.*"
|
||||
}
|
||||
|
||||
function is_groovy {
|
||||
[ "${1%%.groovy}" != "${1}" ]
|
||||
}
|
||||
|
||||
function convert_config_to_class {
|
||||
classfile=$( find_classfile ${config} )
|
||||
if [ -z "${classfile}" ]; then
|
||||
echo "No class found for ${config}. Compiler failed or class not defined?"
|
||||
exit 1
|
||||
fi
|
||||
config="${classfile#${TARGETDIR}/}"
|
||||
while [ "${config%/*}" != "${config}" ]; do
|
||||
config="${config%/*}"."${config##*/}"
|
||||
done
|
||||
}
|
||||
|
||||
config=$1; shift
|
||||
configs=()
|
||||
compilables=()
|
||||
while [ "$config" != "" ]; do
|
||||
if is_groovy "$config"; then
|
||||
if is_compile_needed "${config}"; then
|
||||
compilables[${#compilables[@]}]="${config}"
|
||||
fi
|
||||
configs[${#configs[@]}]="${config}"
|
||||
elif is_option "${config}"; then
|
||||
case "${config%=*}" in
|
||||
"--handler") SPRING_HANDLER="${config#*=}";;
|
||||
esac
|
||||
else
|
||||
args[${#args[@]}]="${config}"
|
||||
fi
|
||||
config=$1; shift
|
||||
done
|
||||
|
||||
CLASSPATH="${SPRING_BIN}":"${TARGETDIR}"
|
||||
|
||||
for f in "${SPRING_HOME}"/lib/*.jar; do
|
||||
CLASSPATH="${CLASSPATH}":$f
|
||||
done
|
||||
|
||||
for f in "${SPRING_HOME}"/*.jar; do
|
||||
CLASSPATH="${CLASSPATH}":$f
|
||||
done
|
||||
|
||||
if $cygwin; then
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
fi
|
||||
|
||||
if [ "${#compilables[@]}" -gt 0 ]; then
|
||||
groovyc -cp "${CLASSPATH}" --configscript "$SPRING_BIN"/customizer.groovy -d "${TARGETDIR}" "${compilables[@]}"
|
||||
fi
|
||||
|
||||
config_classes=("org.springframework.bootstrap.grapes.BootstrapAutoConfiguration.class")
|
||||
for config in "${configs[@]}"; do
|
||||
convert_config_to_class
|
||||
config_classes[${#config_classes[@]}]="${config}"
|
||||
done
|
||||
|
||||
if [ "${#config_classes[@]}" == "0" ]; then
|
||||
echo "No files to run."
|
||||
exit 2
|
||||
fi
|
||||
|
||||
exec groovy -cp "${CLASSPATH}" -Dspring.home="${SPRING_HOME}" --configscript "$SPRING_BIN"/customizer.groovy "$SPRING_BIN"/spring-"${SPRING_HANDLER}".groovy "${config_classes[@]}" "${args[@]}"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,24 +0,0 @@
|
||||
// Get the args and turn them into classes
|
||||
def configs = []
|
||||
def parameters = []
|
||||
args.each { arg ->
|
||||
if (arg.endsWith(".class")) {
|
||||
configs << arg.replaceAll(".class", "")
|
||||
} else {
|
||||
parameters << arg
|
||||
}
|
||||
}
|
||||
|
||||
// Dynamically grab some dependencies
|
||||
def dependencySource = "org.springframework.bootstrap.grapes.Dependencies" as Class // TODO: maybe strategise this
|
||||
def dependencies = [*dependencySource.defaults(), *dependencySource.dependencies(configs)]
|
||||
configs = dependencies + configs
|
||||
|
||||
// Do this before any Spring auto stuff is used in case it enhances the classpath
|
||||
configs = configs as Class[]
|
||||
parameters = parameters as String[]
|
||||
|
||||
// Now run the application
|
||||
def applicationClass = "org.springframework.bootstrap.SpringApplication" as Class
|
||||
|
||||
applicationClass.run(configs, parameters)
|
@ -1,27 +0,0 @@
|
||||
// Spring stuff needs to be on the system classloader apparently (when using @Configuration)
|
||||
@GrabResolver(name='spring-milestone', root='http://maven.springframework.org/milestone')
|
||||
@GrabConfig(systemClassLoader=true)
|
||||
@Grab("org.springframework:spring-context:4.0.0.BOOTSTRAP-SNAPSHOT")
|
||||
@GrabExclude("commons-logging:commons-logging")
|
||||
@Grab("org.slf4j:jcl-over-slf4j:1.6.1")
|
||||
@Grab("org.slf4j:slf4j-jdk14:1.6.1")
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext
|
||||
|
||||
// Now create a Spring context
|
||||
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext()
|
||||
// Get the args and turn them into classes
|
||||
def configs = []
|
||||
def parameters = []
|
||||
boolean endconfigs = false
|
||||
args.each { arg ->
|
||||
if (arg.endsWith(".class")) {
|
||||
configs += arg.replaceAll(".class", "")
|
||||
} else {
|
||||
parameters += arg
|
||||
}
|
||||
}
|
||||
configs = configs as Class[]
|
||||
parameters = parameters as String[]
|
||||
// Register the config classes, can be @Configuration or @Component etc.
|
||||
ctx.register(configs)
|
||||
ctx.refresh()
|
@ -1,8 +0,0 @@
|
||||
@Controller
|
||||
class App {
|
||||
@RequestMapping("/")
|
||||
@ResponseBody
|
||||
String home() {
|
||||
return "Hello World!"
|
||||
}
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
@Configuration
|
||||
class Empty {
|
||||
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
@Grab("org.hsqldb:hsqldb-j5:2.0.0")
|
||||
@EnableBatchProcessing
|
||||
class JobConfig {
|
||||
|
||||
@Autowired
|
||||
private JobBuilderFactory jobs
|
||||
|
||||
@Autowired
|
||||
private StepBuilderFactory steps
|
||||
|
||||
@Bean
|
||||
protected Tasklet tasklet() {
|
||||
return new Tasklet() {
|
||||
RepeatStatus execute(StepContribution contribution, ChunkContext context) {
|
||||
return RepeatStatus.FINISHED
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Bean
|
||||
Job job() throws Exception {
|
||||
return jobs.get("job").start(step1()).build()
|
||||
}
|
||||
|
||||
@Bean
|
||||
protected Step step1() throws Exception {
|
||||
return steps.get("step1").tasklet(tasklet()).build()
|
||||
}
|
||||
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
import java.io.File;
|
||||
|
||||
import org.springframework.bootstrap.CommandLineRunner;
|
||||
|
||||
@Component
|
||||
class Signal implements CommandLineRunner {
|
||||
|
||||
private File messages = new File("target/messages")
|
||||
|
||||
boolean ready = false
|
||||
|
||||
@Override
|
||||
void run(String... args) {
|
||||
messages.mkdirs()
|
||||
new File(messages, "ready").write("Ready!")
|
||||
ready = true
|
||||
}
|
||||
}
|
@ -1,174 +0,0 @@
|
||||
/*
|
||||
* Cloud Foundry 2012.02.03 Beta
|
||||
* Copyright (c) [2009-2012] VMware, Inc. All Rights Reserved.
|
||||
*
|
||||
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
|
||||
* You may not use this product except in compliance with the License.
|
||||
*
|
||||
* This product includes a number of subcomponents with
|
||||
* separate copyright notices and license terms. Your use of these
|
||||
* subcomponents is subject to the terms and conditions of the
|
||||
* subcomponent's license, as noted in the LICENSE file.
|
||||
*/
|
||||
|
||||
package org.springframework.bootstrap.groovy
|
||||
|
||||
/**
|
||||
* <p>As part of the gvm test suite we need to launch a bash shell and execute
|
||||
* multiple commands in it. This is tricky to do using Java's support for
|
||||
* working with external processes as the API can't tell you when a command
|
||||
* has finished executing.</p>
|
||||
* <p>This class provides some hacks that allow you to serially execute commands
|
||||
* in an external bash process in a fairly reliable manner and to retrieve the
|
||||
* output of those commands.</p>
|
||||
*/
|
||||
class BashEnv {
|
||||
|
||||
static final PROMPT = ""
|
||||
static final EXIT_CODE_CMD = 'echo "Exit code is: $?"'
|
||||
static final EXIT_CODE_PATTERN = ~/Exit code is: (\d+)\s*${PROMPT}?$/
|
||||
|
||||
private final Object outputLock = new Object()
|
||||
|
||||
def exitCode
|
||||
def process
|
||||
def processOutput = new StringBuilder()
|
||||
def commandOutput
|
||||
|
||||
// Command timeout in milliseconds
|
||||
def timeout = 5000
|
||||
def workDir
|
||||
def env
|
||||
|
||||
BashEnv(workDir, Map env) {
|
||||
this.workDir = workDir as File
|
||||
|
||||
env = env + [PS1: PROMPT]
|
||||
this.env = env.collect { k, v -> k + '=' + v }
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the external bash process.
|
||||
*/
|
||||
void start() {
|
||||
process = ["bash", "--noprofile", "--norc", "-i"].execute(env, workDir)
|
||||
|
||||
consumeProcessStream(process.inputStream)
|
||||
consumeProcessStream(process.errorStream)
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the external bash process and waits for it to finish.
|
||||
*/
|
||||
void stop() {
|
||||
execute("exit")
|
||||
process.waitFor()
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a command line to the external bash process and returns once the
|
||||
* command has finished executing. If the command is interactive and requires
|
||||
* input during it's execution (for example a y/n answer to a question) you
|
||||
* can provide that input as a list of strings.
|
||||
*/
|
||||
void execute(String cmdline, List inputs = []) {
|
||||
resetOutput()
|
||||
|
||||
if (cmdline != "exit") {
|
||||
exitCode = null
|
||||
}
|
||||
|
||||
process.outputStream << cmdline << "\n"
|
||||
process.outputStream.flush()
|
||||
|
||||
if (cmdline != "exit") {
|
||||
for (input in inputs) {
|
||||
process.outputStream << input << "\n"
|
||||
}
|
||||
process.outputStream << EXIT_CODE_CMD << "\n"
|
||||
process.outputStream.flush()
|
||||
}
|
||||
|
||||
def start = System.currentTimeMillis()
|
||||
while (cmdline != "exit") {
|
||||
Thread.sleep 100
|
||||
|
||||
synchronized (outputLock) {
|
||||
// Remove all the extraneous text that's not related to the
|
||||
// command's output. This includes the command string itself,
|
||||
// the 'echo' command to display the command's exit code, and
|
||||
// the exit code line.
|
||||
removeFromOutput(cmdline + "\n")
|
||||
removeFromOutput(PROMPT + EXIT_CODE_CMD + "\n")
|
||||
|
||||
def str = processOutput.toString()
|
||||
def m = EXIT_CODE_PATTERN.matcher(str)
|
||||
commandOutput = str
|
||||
if (m) {
|
||||
exitCode = m[0][1]
|
||||
|
||||
// Remove this exit code line from the output.
|
||||
commandOutput = m.replaceAll('')
|
||||
break
|
||||
}
|
||||
|
||||
// If the command times out, we should break out of the loop and
|
||||
// display whatever output has already been produced.
|
||||
if (System.currentTimeMillis() - start > timeout) {
|
||||
commandOutput = "ALERT! Command timed out. Last output was:\n\n${processOutput}"
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the exit code of the last command that was executed.
|
||||
*/
|
||||
int getStatus() {
|
||||
if (!exitCode) throw new IllegalStateException("Did you run execute() before getting the status?")
|
||||
return exitCode.toInteger()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the text output (both stdout and stderr) of the last command
|
||||
* that was executed.
|
||||
*/
|
||||
String getOutput() {
|
||||
return commandOutput
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the saved command output.
|
||||
*/
|
||||
void resetOutput() {
|
||||
synchronized (outputLock) {
|
||||
processOutput = new StringBuilder()
|
||||
}
|
||||
}
|
||||
|
||||
private void consumeProcessStream(final InputStream stream) {
|
||||
char[] buffer = new char[256]
|
||||
Thread.start {
|
||||
def reader = new InputStreamReader(stream)
|
||||
def charsRead = 0
|
||||
while (charsRead != -1) {
|
||||
charsRead = reader.read(buffer, 0, 256)
|
||||
if (charsRead > 0) {
|
||||
synchronized (outputLock) {
|
||||
processOutput.append(buffer, 0, charsRead)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void removeFromOutput(String line) {
|
||||
synchronized (outputLock) {
|
||||
def pos = processOutput.indexOf(line)
|
||||
if (pos != -1) {
|
||||
processOutput.delete(pos, pos + line.size() - 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
/*
|
||||
* Cloud Foundry 2012.02.03 Beta
|
||||
* Copyright (c) [2009-2012] VMware, Inc. All Rights Reserved.
|
||||
*
|
||||
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
|
||||
* You may not use this product except in compliance with the License.
|
||||
*
|
||||
* This product includes a number of subcomponents with
|
||||
* separate copyright notices and license terms. Your use of these
|
||||
* subcomponents is subject to the terms and conditions of the
|
||||
* subcomponent's license, as noted in the LICENSE file.
|
||||
*/
|
||||
|
||||
package org.springframework.bootstrap.groovy;
|
||||
|
||||
import static org.junit.Assert.*
|
||||
|
||||
import java.util.concurrent.ExecutorService
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
class ScriptTests {
|
||||
|
||||
private BashEnv bash
|
||||
|
||||
private ExecutorService executor = Executors.newFixedThreadPool(2)
|
||||
|
||||
@Before
|
||||
void init() {
|
||||
bash = new BashEnv(".", [SPRING_HOME: "target"])
|
||||
bash.start()
|
||||
bash.execute("export GVM_DIR=~/.gvm")
|
||||
bash.execute("source ~/.gvm/bin/gvm-init.sh")
|
||||
assertEquals("You need to install gvm to run these tests", 0, bash.status)
|
||||
bash.execute("gvm use groovy 2.1.0")
|
||||
assertEquals("You need to do this before running the tests: > gvm install groovy 2.1.0", 0, bash.status)
|
||||
}
|
||||
|
||||
@After
|
||||
void clean() {
|
||||
bash?.stop()
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVanillaApplicationContext() {
|
||||
execute(bash, "src/main/scripts/spring src/test/apps/Empty.groovy")
|
||||
assertEquals(0, bash.status)
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBatchApplicationContext() {
|
||||
execute(bash, "src/main/scripts/spring src/test/apps/JobConfig.groovy foo=bar")
|
||||
assertEquals(0, bash.status)
|
||||
assertTrue(bash.output.contains("[SimpleJob: [name=job]] completed with the following parameters: [{foo=bar}]"))
|
||||
}
|
||||
|
||||
private void execute(BashEnv bash, String cmdline) {
|
||||
bash.execute(cmdline)
|
||||
if (bash.exitCode && bash.status!=0) {
|
||||
println "Unsuccessful execution (${cmdline}). Output: \n${bash.output}"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
/*
|
||||
* Cloud Foundry 2012.02.03 Beta
|
||||
* Copyright (c) [2009-2012] VMware, Inc. All Rights Reserved.
|
||||
*
|
||||
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
|
||||
* You may not use this product except in compliance with the License.
|
||||
*
|
||||
* This product includes a number of subcomponents with
|
||||
* separate copyright notices and license terms. Your use of these
|
||||
* subcomponents is subject to the terms and conditions of the
|
||||
* subcomponent's license, as noted in the LICENSE file.
|
||||
*/
|
||||
|
||||
package org.springframework.bootstrap.groovy;
|
||||
|
||||
import static org.junit.Assert.*
|
||||
|
||||
import java.util.concurrent.ExecutorService
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
import org.junit.Test
|
||||
import org.springframework.web.client.RestTemplate
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
class WebScriptTests {
|
||||
|
||||
private BashEnv bash
|
||||
|
||||
private ExecutorService executor = Executors.newFixedThreadPool(2)
|
||||
|
||||
private File messages = new File("target/messages")
|
||||
|
||||
@Before
|
||||
void init() {
|
||||
assertTrue("Couldn't delete messages directory", messages.deleteDir())
|
||||
bash = new BashEnv(".", [SPRING_HOME: "target"])
|
||||
bash.start()
|
||||
bash.execute("export GVM_DIR=~/.gvm")
|
||||
bash.execute("source ~/.gvm/bin/gvm-init.sh")
|
||||
assertEquals("You need to install gvm to run these tests", 0, bash.status)
|
||||
bash.execute("gvm use groovy 2.1.0")
|
||||
assertEquals("You need to do this before running the tests: > gvm install groovy 2.1.0", 0, bash.status)
|
||||
}
|
||||
|
||||
@After
|
||||
void clean() {
|
||||
killit()
|
||||
bash?.stop()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
void testWebApplicationContext() {
|
||||
executor.submit {
|
||||
execute(bash, "src/main/scripts/spring src/test/apps/App.groovy src/test/apps/Signal.groovy")
|
||||
}
|
||||
File ready = new File(messages, "ready")
|
||||
long timeout = 10000
|
||||
long t0 = System.currentTimeMillis()
|
||||
while (!ready.exists() && System.currentTimeMillis() - t0 < timeout) {
|
||||
println "Waiting for app to start"
|
||||
Thread.sleep(1000)
|
||||
}
|
||||
if (ready.exists()) {
|
||||
println ready.text
|
||||
} else {
|
||||
fail("Timed out waiting for app to start")
|
||||
}
|
||||
|
||||
// assertEquals(0, bash.status)
|
||||
def response = new RestTemplate().getForEntity("http://localhost:8080", String.class)
|
||||
assertEquals("Hello World!", response.body)
|
||||
}
|
||||
|
||||
private void killit() {
|
||||
BashEnv reaper = new BashEnv(".", [SPRING_HOME: "target"])
|
||||
reaper.start()
|
||||
reaper?.execute("pkill -9 -f '\\--configscript src/main/scripts/customizer.groovy'")
|
||||
reaper?.stop()
|
||||
}
|
||||
|
||||
private void execute(BashEnv bash, String cmdline) {
|
||||
bash.execute(cmdline)
|
||||
if (bash.exitCode && bash.status!=0) {
|
||||
println "Unsuccessful execution (${cmdline}). Output: \n${bash.output}"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue