From fb6b2244707dd5dfad12d62cb6a3c396555270d1 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 24 Apr 2013 10:02:07 +0100 Subject: [PATCH] Fast forward existing prototype work --- .gitignore | 11 + .travis.yml | 5 + README.md | 111 ++++ eclipse/eclipse-code-formatter.xml | 291 ++++++++++ eclipse/org.eclipse.jdt.core.prefs | 385 +++++++++++++ eclipse/org.eclipse.jdt.ui.prefs | 66 +++ ....maveneclipse.site-0.0.1-SNAPSHOT-site.zip | Bin 0 -> 43049 bytes pom.xml | 398 ++++++++++++++ spring-bootstrap-applications/pom.xml | 22 + .../spring-bootstrap-application/pom.xml | 28 + .../pom.xml | 23 + .../pom.xml | 22 + .../spring-bootstrap-jpa-application/pom.xml | 22 + .../spring-bootstrap-web-application/pom.xml | 44 ++ .../dependency-reduced-pom.xml | 127 +++++ spring-bootstrap-cli/pom.xml | 107 ++++ spring-bootstrap-cli/samples/app.groovy | 29 + spring-bootstrap-cli/samples/web.groovy | 24 + .../src/main/assembly/descriptor.xml | 30 ++ .../bootstrap/cli/AbstractCommand.java | 81 +++ .../bootstrap/cli/BootstrapCliException.java | 96 ++++ .../bootstrap/cli/Command.java | 68 +++ .../bootstrap/cli/CreateCommand.java | 54 ++ .../bootstrap/cli/NoArgumentsException.java | 28 + .../cli/NoHelpCommandArgumentsException.java | 32 ++ .../bootstrap/cli/NoSuchCommandException.java | 33 ++ .../bootstrap/cli/NoSuchOptionException.java | 32 ++ .../bootstrap/cli/OptionParsingCommand.java | 54 ++ .../bootstrap/cli/RunCommand.java | 146 +++++ .../bootstrap/cli/SpringBootstrapCli.java | 214 ++++++++ .../bootstrap/cli/VersionCommand.java | 35 ++ .../bootstrap/cli/compiler/AstUtils.java | 45 ++ .../compiler/CompilerAutoConfiguration.java | 83 +++ .../cli/compiler/DependencyCustomizer.java | 130 +++++ .../compiler/ExtendedGroovyClassLoader.java | 88 +++ .../cli/compiler/GroovyCompiler.java | 148 +++++ .../compiler/GroovyCompilerConfiguration.java | 36 ++ .../SpringBatchCompilerAutoConfiguration.java | 64 +++ ...ingBootstrapCompilerAutoConfiguration.java | 97 ++++ .../SpringMvcCompilerAutoConfiguration.java | 60 +++ .../bootstrap/cli/runner/BootstrapRunner.java | 191 +++++++ .../runner/BootstrapRunnerConfiguration.java | 41 ++ .../src/main/resources/.gitignore | 0 .../cli/SpringBootstrapCliTests.java | 186 +++++++ spring-bootstrap-groovy/README.md | 27 + spring-bootstrap-groovy/pom.xml | 180 +++++++ .../src/main/assembly/descriptor.xml | 30 ++ .../bootstrap/grapes/BatchGrapes.groovy | 52 ++ .../grapes/BatchInitializationGrapes.groovy | 40 ++ .../bootstrap/grapes/BootstrapGrapes.groovy | 20 + .../bootstrap/grapes/Dependencies.groovy | 92 ++++ .../bootstrap/grapes/HadoopGrapes.groovy | 26 + .../bootstrap/grapes/TomcatGrapes.groovy | 9 + .../bootstrap/grapes/WebGrapes.groovy | 5 + .../src/main/resources/hadoop-context.xml | 20 + .../src/main/scripts/customizer.groovy | 100 ++++ .../src/main/scripts/groovy.conf | 33 ++ .../src/main/scripts/spring | 163 ++++++ .../src/main/scripts/spring-auto.groovy | 24 + .../src/main/scripts/spring-vanilla.groovy | 27 + .../src/test/apps/App.groovy | 8 + .../src/test/apps/Empty.groovy | 4 + .../src/test/apps/JobConfig.groovy | 30 ++ .../src/test/apps/Signal.groovy | 18 + .../bootstrap/groovy/BashEnv.groovy | 174 ++++++ .../bootstrap/groovy/ScriptTests.groovy | 70 +++ .../bootstrap/groovy/WebScriptTests.groovy | 94 ++++ spring-bootstrap-launcher/pom.xml | 23 + .../bootstrap/launcher/JarLauncher.java | 47 ++ .../bootstrap/launcher/Launcher.java | 198 +++++++ .../bootstrap/launcher/MainMethodRunner.java | 60 +++ .../bootstrap/launcher/WarLauncher.java | 76 +++ .../launcher/data/RandomAccessData.java | 51 ++ .../launcher/data/RandomAccessDataFile.java | 252 +++++++++ .../bootstrap/launcher/data/package-info.java | 23 + .../launcher/jar/JarEntryFilter.java | 38 ++ .../jar/RandomAccessDataZipEntry.java | 49 ++ .../jar/RandomAccessDataZipInputStream.java | 122 +++++ .../launcher/jar/RandomAccessJarFile.java | 435 +++++++++++++++ .../bootstrap/launcher/jar/package-info.java | 21 + .../bootstrap/launcher/package-info.java | 27 + .../launcher/ByteArrayStartsWith.java | 53 ++ .../data/RandomAccessDataFileTest.java | 313 +++++++++++ .../RandomAccessDataZipInputStreamTest.java | 91 ++++ .../launcher/jar/RandomAccessJarFileTest.java | 331 ++++++++++++ spring-bootstrap-samples/pom.xml | 148 +++++ .../spring-bootstrap-data-sample/pom.xml | 83 +++ .../sample/data/DataBootstrapApplication.java | 17 + .../bootstrap/sample/data/domain/City.java | 60 +++ .../bootstrap/sample/data/domain/Hotel.java | 65 +++ .../sample/data/domain/HotelSummary.java | 47 ++ .../bootstrap/sample/data/domain/Rating.java | 5 + .../sample/data/domain/RatingCount.java | 25 + .../bootstrap/sample/data/domain/Review.java | 113 ++++ .../sample/data/domain/ReviewDetails.java | 70 +++ .../sample/data/domain/TripType.java | 5 + .../domain/repository/CityRepository.java | 17 + .../domain/repository/HotelRepository.java | 11 + .../repository/HotelSummaryRepository.java | 90 ++++ .../domain/repository/ReviewRepository.java | 15 + .../data/service/CitySearchCriteria.java | 28 + .../sample/data/service/CityService.java | 16 + .../sample/data/service/HotelService.java | 22 + .../sample/data/service/ReviewsSummary.java | 9 + .../data/service/impl/CityServiceImpl.java | 68 +++ .../data/service/impl/HotelServiceImpl.java | 102 ++++ .../sample/data/web/SampleController.java | 20 + .../src/main/resources/import.sql | 186 +++++++ .../data/DataBootstrapApplicationTests.java | 72 +++ .../spring-bootstrap-jetty-sample/pom.xml | 57 ++ .../jetty/JettyBootstrapApplication.java | 17 + .../jetty/service/HelloWorldService.java | 16 + .../sample/jetty/web/SampleController.java | 20 + .../jetty/JettyBootstrapApplicationTests.java | 72 +++ .../spring-bootstrap-profile-sample/pom.xml | 43 ++ .../simple/ProfileBootstrapApplication.java | 31 ++ .../simple/service/GoodbyeWorldService.java | 19 + .../simple/service/HelloWorldService.java | 19 + .../sample/simple/service/MessageService.java | 26 + .../src/main/resources/application.yml | 7 + .../ProfileBootstrapApplicationTests.java | 73 +++ .../spring-bootstrap-sample/pom.xml | 38 ++ .../dependency-reduced-pom.xml | 129 +++++ .../spring-bootstrap-service-sample/pom.xml | 109 ++++ .../sample/service/HelloWorldService.java | 16 + .../sample/service/SampleController.java | 28 + .../service/ServiceBootstrapApplication.java | 19 + .../sample/service/ServiceProperties.java | 33 ++ .../src/main/resources/application.properties | 7 + .../ServiceBootstrapApplicationTests.java | 167 ++++++ ...ntextServiceBootstrapApplicationTests.java | 148 +++++ .../spring-bootstrap-simple-sample/pom.xml | 38 ++ .../simple/SimpleBootstrapApplication.java | 31 ++ .../simple/service/HelloWorldService.java | 16 + .../src/main/resources/application.properties | 1 + .../SimpleBootstrapApplicationTests.java | 64 +++ .../spring-bootstrap-tomcat-sample/pom.xml | 50 ++ .../tomcat/TomcatBootstrapApplication.java | 17 + .../tomcat/service/HelloWorldService.java | 16 + .../sample/tomcat/web/SampleController.java | 20 + .../TomcatBootstrapApplicationTests.java | 72 +++ .../spring-bootstrap-trad-sample/README.txt | 17 + .../spring-bootstrap-trad-sample/pom.xml | 124 +++++ .../sample/trad/TradBootstrapApplication.java | 17 + .../sample/trad/config/WebConfig.java | 29 + .../src/main/resources/log4j.properties | 7 + .../src/main/webapp/WEB-INF/views/home.jsp | 11 + .../src/main/webapp/WEB-INF/web.xml | 31 ++ .../src/main/webapp/index.html | 6 + .../trad/TradBootstrapApplicationTests.java | 85 +++ .../src/test/resources/log4j.properties | 7 + .../spring-bootstrap-xml-sample/pom.xml | 27 + .../sample/xml/XmlBootstrapApplication.java | 22 + .../sample/xml/service/HelloWorldService.java | 16 + .../META-INF/application-context.xml | 14 + .../xml/XmlBootstrapApplicationTests.java | 40 ++ .../main/assembly/jar-with-dependencies.xml | 26 + spring-bootstrap-service/pom.xml | 79 +++ .../service/ContainerConfiguration.java | 142 +++++ .../service/HealthzAutoConfiguration.java | 50 ++ .../service/ManagementAutoConfiguration.java | 81 +++ .../ManagementContainerConfiguration.java | 121 +++++ .../service/MetricAutoConfiguration.java | 56 ++ .../MetricFilterAutoConfiguration.java | 121 +++++ .../service/SecurityAutoConfiguration.java | 87 +++ .../service/ServiceAutoConfiguration.java | 44 ++ .../service/VarzAutoConfiguration.java | 57 ++ ...urationPropertiesBindingConfiguration.java | 138 +++++ ...ConfigurationPropertiesImportSelector.java | 64 +++ .../EnableConfigurationProperties.java | 38 ++ .../service/error/ErrorEndpoint.java | 91 ++++ .../service/health/HealthIndicator.java | 29 + .../service/health/HealthzEndpoint.java | 45 ++ .../health/VanillaHealthIndicator.java | 29 + .../service/metrics/CounterService.java | 27 + .../metrics/DefaultCounterService.java | 59 ++ .../service/metrics/DefaultGaugeService.java | 49 ++ .../service/metrics/GaugeService.java | 23 + .../metrics/InMemoryMetricRepository.java | 81 +++ .../service/metrics/Measurement.java | 80 +++ .../bootstrap/service/metrics/Metric.java | 85 +++ .../service/metrics/MetricRepository.java | 38 ++ .../properties/ContainerProperties.java | 111 ++++ .../properties/SecurityProperties.java | 38 ++ .../bootstrap/service/varz/PublicMetrics.java | 33 ++ .../service/varz/VanillaPublicMetrics.java | 49 ++ .../bootstrap/service/varz/VarzEndpoint.java | 52 ++ .../main/resources/META-INF/spring.factories | 4 + spring-bootstrap/pom.xml | 129 +++++ .../org/springframework/bootstrap/Banner.java | 49 ++ .../bootstrap/BeanDefinitionLoader.java | 175 ++++++ .../bootstrap/CommandLineRunner.java | 38 ++ ...nfigFileApplicationContextInitializer.java | 266 +++++++++ ...DelegateApplicationContextInitializer.java | 115 ++++ .../bootstrap/SpringApplication.java | 507 ++++++++++++++++++ .../PropertyPlaceholderAutoConfiguration.java | 42 ++ .../JpaRepositoriesAutoConfiguration.java | 39 ++ ...JpaRepositoriesAutoConfigureRegistrar.java | 122 +++++ .../EmbeddedDatabaseAutoConfiguration.java | 87 +++ .../jpa/HibernateJpaAutoConfiguration.java | 72 +++ .../orm/jpa/JpaAutoConfiguration.java | 114 ++++ .../web/EmbeddedJettyAutoConfiguration.java | 47 ++ .../web/EmbeddedTomcatAutoConfiguration.java | 46 ++ .../web/WebMvcAutoConfiguration.java | 67 +++ .../bind/CustomPropertyConstructor.java | 98 ++++ .../bind/PropertiesConfigurationFactory.java | 246 +++++++++ .../PropertySourcesBindingPostProcessor.java | 82 +++ .../bind/PropertySourcesPropertyValues.java | 119 ++++ .../bootstrap/bind/RelaxedDataBinder.java | 226 ++++++++ .../bind/YamlConfigurationFactory.java | 191 +++++++ .../bootstrap/config/YamlMapFactoryBean.java | 127 +++++ .../bootstrap/config/YamlProcessor.java | 317 +++++++++++ .../config/YamlPropertiesFactoryBean.java | 111 ++++ .../annotation/AbstractOnBeanCondition.java | 93 ++++ .../annotation/AutoConfigurationUtils.java | 54 ++ .../context/annotation/ConditionalOnBean.java | 55 ++ .../annotation/ConditionalOnClass.java | 52 ++ .../annotation/ConditionalOnExpression.java | 37 ++ .../annotation/ConditionalOnMissingBean.java | 55 ++ .../annotation/ConfigurationProperties.java | 75 +++ .../annotation/EnableAutoConfiguration.java | 70 +++ ...EnableAutoConfigurationImportSelector.java | 170 ++++++ .../annotation/ExpressionCondition.java | 50 ++ .../context/annotation/OnBeanCondition.java | 33 ++ .../context/annotation/OnClassCondition.java | 65 +++ .../annotation/OnMissingBeanCondition.java | 40 ++ ...stractEmbeddedServletContainerFactory.java | 305 +++++++++++ ...onConfigEmbeddedWebApplicationContext.java | 175 ++++++ .../embedded/EmbeddedServletContainer.java | 40 ++ .../EmbeddedServletContainerException.java | 31 ++ .../EmbeddedServletContainerFactory.java | 48 ++ .../EmbeddedWebApplicationContext.java | 320 +++++++++++ .../bootstrap/context/embedded/ErrorPage.java | 126 +++++ .../embedded/FilterRegistrationBean.java | 255 +++++++++ .../context/embedded/RegistrationBean.java | 115 ++++ .../embedded/ServletRegistrationBean.java | 182 +++++++ .../XmlEmbeddedWebApplicationContext.java | 133 +++++ .../jetty/JettyEmbeddedServletContainer.java | 72 +++ .../JettyEmbeddedServletContainerFactory.java | 273 ++++++++++ ...ervletContextInitializerConfiguration.java | 71 +++ .../context/embedded/jetty/package-info.java | 21 + .../context/embedded/package-info.java | 23 + ...etContextInitializerLifecycleListener.java | 63 +++ .../TomcatEmbeddedServletContainer.java | 88 +++ ...TomcatEmbeddedServletContainerFactory.java | 360 +++++++++++++ .../context/embedded/tomcat/package-info.java | 21 + .../logging/JavaLoggerConfigurer.java | 53 ++ .../bootstrap/logging/LogbackConfigurer.java | 56 ++ .../bootstrap/logging/LoggingInitializer.java | 181 +++++++ .../PropertiesMergingResourceTransformer.java | 78 +++ .../main/resources/META-INF/spring.factories | 11 + .../bootstrap/logging/log4j.properties | 18 + .../bootstrap/logging/logback.xml | 28 + .../bootstrap/logging/logging.properties | 9 + .../bootstrap/BeanDefinitionLoaderTests.java | 110 ++++ ...ileApplicationContextInitializerTests.java | 121 +++++ ...gateApplicationContextInitializerTest.java | 138 +++++ .../bootstrap/SpringApplicationTests.java | 379 +++++++++++++ .../PropertiesConfigurationFactoryTests.java | 135 +++++ .../PropertySourcesPropertyValuesTests.java | 103 ++++ .../bind/RelaxedDataBinderTests.java | 404 ++++++++++++++ .../bind/YamlConfigurationFactoryTests.java | 89 +++ ...tEmbeddedServletContainerFactoryTests.java | 250 +++++++++ ...figEmbeddedWebApplicationContextTests.java | 73 +++ .../EmbeddedWebApplicationContextTests.java | 308 +++++++++++ .../context/embedded/ExampleFilter.java | 50 ++ .../context/embedded/ExampleServlet.java | 39 ++ .../embedded/FilterRegistrationBeanTests.java | 221 ++++++++ .../MockEmbeddedServletContainerFactory.java | 225 ++++++++ .../context/embedded/MockFilter.java | 47 ++ .../context/embedded/MockServlet.java | 38 ++ .../ServletRegistrationBeanTests.java | 207 +++++++ ...XmlEmbeddedWebApplicationContextTests.java | 91 ++++ ...leEmbeddedWebApplicationConfiguration.java | 47 ++ ...yEmbeddedServletContainerFactoryTests.java | 61 +++ ...tEmbeddedServletContainerFactoryTests.java | 64 +++ .../logging/JavaLoggerConfigurerTests.java | 73 +++ .../logging/LogbackConfigurerTests.java | 73 +++ .../logging/LoggingInitializerTests.java | 142 +++++ .../bootstrap/logging/TestFormatter.java | 33 ++ .../bootstrap/sampleconfig/MyComponent.java | 24 + .../enableprofile-myprofile.properties | 1 + .../test/resources/enableprofile.properties | 1 + .../src/test/resources/logback-nondefault.xml | 12 + .../src/test/resources/logback-test.xml | 13 + .../resources/logging-nondefault.properties | 3 + ...pleEmbeddedWebApplicationConfiguration.xml | 11 + .../bootstrap/sample-beans.xml | 9 + .../specificfile-specificprofile.properties | 1 + .../resources/specificlocation.properties | 1 + .../src/test/resources/testprofiles.yml | 9 + .../test/resources/testproperties.properties | 1 + .../src/test/resources/testsetprofiles.yml | 11 + .../src/test/resources/testyaml.yml | 3 + 294 files changed, 23494 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 eclipse/eclipse-code-formatter.xml create mode 100644 eclipse/org.eclipse.jdt.core.prefs create mode 100644 eclipse/org.eclipse.jdt.ui.prefs create mode 100644 eclipse/org.eclipse.m2e.maveneclipse.site-0.0.1-SNAPSHOT-site.zip create mode 100644 pom.xml create mode 100644 spring-bootstrap-applications/pom.xml create mode 100644 spring-bootstrap-applications/spring-bootstrap-application/pom.xml create mode 100644 spring-bootstrap-applications/spring-bootstrap-batch-application/pom.xml create mode 100644 spring-bootstrap-applications/spring-bootstrap-integration-application/pom.xml create mode 100644 spring-bootstrap-applications/spring-bootstrap-jpa-application/pom.xml create mode 100644 spring-bootstrap-applications/spring-bootstrap-web-application/pom.xml create mode 100644 spring-bootstrap-cli/dependency-reduced-pom.xml create mode 100644 spring-bootstrap-cli/pom.xml create mode 100644 spring-bootstrap-cli/samples/app.groovy create mode 100644 spring-bootstrap-cli/samples/web.groovy create mode 100644 spring-bootstrap-cli/src/main/assembly/descriptor.xml create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/AbstractCommand.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/BootstrapCliException.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/Command.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/CreateCommand.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/NoArgumentsException.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/NoHelpCommandArgumentsException.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/NoSuchCommandException.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/NoSuchOptionException.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/OptionParsingCommand.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/RunCommand.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/SpringBootstrapCli.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/VersionCommand.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/AstUtils.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/CompilerAutoConfiguration.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/DependencyCustomizer.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/ExtendedGroovyClassLoader.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/GroovyCompiler.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/GroovyCompilerConfiguration.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/autoconfigure/SpringBatchCompilerAutoConfiguration.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/autoconfigure/SpringBootstrapCompilerAutoConfiguration.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/compiler/autoconfigure/SpringMvcCompilerAutoConfiguration.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/runner/BootstrapRunner.java create mode 100644 spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/runner/BootstrapRunnerConfiguration.java create mode 100644 spring-bootstrap-cli/src/main/resources/.gitignore create mode 100644 spring-bootstrap-cli/src/test/java/org/springframework/bootstrap/cli/SpringBootstrapCliTests.java create mode 100644 spring-bootstrap-groovy/README.md create mode 100644 spring-bootstrap-groovy/pom.xml create mode 100644 spring-bootstrap-groovy/src/main/assembly/descriptor.xml create mode 100644 spring-bootstrap-groovy/src/main/groovy/org/springframework/bootstrap/grapes/BatchGrapes.groovy create mode 100644 spring-bootstrap-groovy/src/main/groovy/org/springframework/bootstrap/grapes/BatchInitializationGrapes.groovy create mode 100644 spring-bootstrap-groovy/src/main/groovy/org/springframework/bootstrap/grapes/BootstrapGrapes.groovy create mode 100644 spring-bootstrap-groovy/src/main/groovy/org/springframework/bootstrap/grapes/Dependencies.groovy create mode 100644 spring-bootstrap-groovy/src/main/groovy/org/springframework/bootstrap/grapes/HadoopGrapes.groovy create mode 100644 spring-bootstrap-groovy/src/main/groovy/org/springframework/bootstrap/grapes/TomcatGrapes.groovy create mode 100644 spring-bootstrap-groovy/src/main/groovy/org/springframework/bootstrap/grapes/WebGrapes.groovy create mode 100644 spring-bootstrap-groovy/src/main/resources/hadoop-context.xml create mode 100644 spring-bootstrap-groovy/src/main/scripts/customizer.groovy create mode 100644 spring-bootstrap-groovy/src/main/scripts/groovy.conf create mode 100755 spring-bootstrap-groovy/src/main/scripts/spring create mode 100644 spring-bootstrap-groovy/src/main/scripts/spring-auto.groovy create mode 100644 spring-bootstrap-groovy/src/main/scripts/spring-vanilla.groovy create mode 100644 spring-bootstrap-groovy/src/test/apps/App.groovy create mode 100644 spring-bootstrap-groovy/src/test/apps/Empty.groovy create mode 100644 spring-bootstrap-groovy/src/test/apps/JobConfig.groovy create mode 100644 spring-bootstrap-groovy/src/test/apps/Signal.groovy create mode 100644 spring-bootstrap-groovy/src/test/java/org/springframework/bootstrap/groovy/BashEnv.groovy create mode 100644 spring-bootstrap-groovy/src/test/java/org/springframework/bootstrap/groovy/ScriptTests.groovy create mode 100644 spring-bootstrap-groovy/src/test/java/org/springframework/bootstrap/groovy/WebScriptTests.groovy create mode 100644 spring-bootstrap-launcher/pom.xml create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/JarLauncher.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/Launcher.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/MainMethodRunner.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/WarLauncher.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/data/RandomAccessData.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/data/RandomAccessDataFile.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/data/package-info.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/jar/JarEntryFilter.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/jar/RandomAccessDataZipEntry.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/jar/RandomAccessDataZipInputStream.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/jar/RandomAccessJarFile.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/jar/package-info.java create mode 100644 spring-bootstrap-launcher/src/main/java/org/springframework/bootstrap/launcher/package-info.java create mode 100644 spring-bootstrap-launcher/src/test/java/org/springframework/bootstrap/launcher/ByteArrayStartsWith.java create mode 100644 spring-bootstrap-launcher/src/test/java/org/springframework/bootstrap/launcher/data/RandomAccessDataFileTest.java create mode 100644 spring-bootstrap-launcher/src/test/java/org/springframework/bootstrap/launcher/jar/RandomAccessDataZipInputStreamTest.java create mode 100644 spring-bootstrap-launcher/src/test/java/org/springframework/bootstrap/launcher/jar/RandomAccessJarFileTest.java create mode 100644 spring-bootstrap-samples/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/DataBootstrapApplication.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/City.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/Hotel.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/HotelSummary.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/Rating.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/RatingCount.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/Review.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/ReviewDetails.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/TripType.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/repository/CityRepository.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/repository/HotelRepository.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/repository/HotelSummaryRepository.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/domain/repository/ReviewRepository.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/service/CitySearchCriteria.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/service/CityService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/service/HotelService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/service/ReviewsSummary.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/service/impl/CityServiceImpl.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/service/impl/HotelServiceImpl.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/java/org/springframework/bootstrap/sample/data/web/SampleController.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/main/resources/import.sql create mode 100644 spring-bootstrap-samples/spring-bootstrap-data-sample/src/test/java/org/springframework/bootstrap/sample/data/DataBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-jetty-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-jetty-sample/src/main/java/org/springframework/bootstrap/sample/jetty/JettyBootstrapApplication.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-jetty-sample/src/main/java/org/springframework/bootstrap/sample/jetty/service/HelloWorldService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-jetty-sample/src/main/java/org/springframework/bootstrap/sample/jetty/web/SampleController.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-jetty-sample/src/test/java/org/springframework/bootstrap/sample/jetty/JettyBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-profile-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-profile-sample/src/main/java/org/springframework/bootstrap/sample/simple/ProfileBootstrapApplication.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-profile-sample/src/main/java/org/springframework/bootstrap/sample/simple/service/GoodbyeWorldService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-profile-sample/src/main/java/org/springframework/bootstrap/sample/simple/service/HelloWorldService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-profile-sample/src/main/java/org/springframework/bootstrap/sample/simple/service/MessageService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-profile-sample/src/main/resources/application.yml create mode 100644 spring-bootstrap-samples/spring-bootstrap-profile-sample/src/test/java/org/springframework/bootstrap/sample/simple/ProfileBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/dependency-reduced-pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/src/main/java/org/springframework/bootstrap/sample/service/HelloWorldService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/src/main/java/org/springframework/bootstrap/sample/service/SampleController.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/src/main/java/org/springframework/bootstrap/sample/service/ServiceBootstrapApplication.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/src/main/java/org/springframework/bootstrap/sample/service/ServiceProperties.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/src/main/resources/application.properties create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/src/test/java/org/springframework/bootstrap/sample/service/ServiceBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-service-sample/src/test/java/org/springframework/bootstrap/sample/service/VarzContextServiceBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-simple-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-simple-sample/src/main/java/org/springframework/bootstrap/sample/simple/SimpleBootstrapApplication.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-simple-sample/src/main/java/org/springframework/bootstrap/sample/simple/service/HelloWorldService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-simple-sample/src/main/resources/application.properties create mode 100644 spring-bootstrap-samples/spring-bootstrap-simple-sample/src/test/java/org/springframework/bootstrap/sample/simple/SimpleBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-tomcat-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-tomcat-sample/src/main/java/org/springframework/bootstrap/sample/tomcat/TomcatBootstrapApplication.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-tomcat-sample/src/main/java/org/springframework/bootstrap/sample/tomcat/service/HelloWorldService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-tomcat-sample/src/main/java/org/springframework/bootstrap/sample/tomcat/web/SampleController.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-tomcat-sample/src/test/java/org/springframework/bootstrap/sample/tomcat/TomcatBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/README.txt create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/src/main/java/org/springframework/bootstrap/sample/trad/TradBootstrapApplication.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/src/main/java/org/springframework/bootstrap/sample/trad/config/WebConfig.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/src/main/resources/log4j.properties create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/src/main/webapp/WEB-INF/views/home.jsp create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/src/main/webapp/WEB-INF/web.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/src/main/webapp/index.html create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/src/test/java/org/springframework/bootstrap/sample/trad/TradBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-trad-sample/src/test/resources/log4j.properties create mode 100644 spring-bootstrap-samples/spring-bootstrap-xml-sample/pom.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-xml-sample/src/main/java/org/springframework/bootstrap/sample/xml/XmlBootstrapApplication.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-xml-sample/src/main/java/org/springframework/bootstrap/sample/xml/service/HelloWorldService.java create mode 100644 spring-bootstrap-samples/spring-bootstrap-xml-sample/src/main/resources/META-INF/application-context.xml create mode 100644 spring-bootstrap-samples/spring-bootstrap-xml-sample/src/test/java/org/springframework/bootstrap/sample/xml/XmlBootstrapApplicationTests.java create mode 100644 spring-bootstrap-samples/src/main/assembly/jar-with-dependencies.xml create mode 100644 spring-bootstrap-service/pom.xml create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/ContainerConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/HealthzAutoConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/ManagementAutoConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/ManagementContainerConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/MetricAutoConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/MetricFilterAutoConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/SecurityAutoConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/ServiceAutoConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/autoconfigure/service/VarzAutoConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/annotation/ConfigurationPropertiesBindingConfiguration.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/annotation/ConfigurationPropertiesImportSelector.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/annotation/EnableConfigurationProperties.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/error/ErrorEndpoint.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/health/HealthIndicator.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/health/HealthzEndpoint.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/health/VanillaHealthIndicator.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/metrics/CounterService.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/metrics/DefaultCounterService.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/metrics/DefaultGaugeService.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/metrics/GaugeService.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/metrics/InMemoryMetricRepository.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/metrics/Measurement.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/metrics/Metric.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/metrics/MetricRepository.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/properties/ContainerProperties.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/properties/SecurityProperties.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/varz/PublicMetrics.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/varz/VanillaPublicMetrics.java create mode 100644 spring-bootstrap-service/src/main/java/org/springframework/bootstrap/service/varz/VarzEndpoint.java create mode 100644 spring-bootstrap-service/src/main/resources/META-INF/spring.factories create mode 100644 spring-bootstrap/pom.xml create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/Banner.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/BeanDefinitionLoader.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/CommandLineRunner.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/ConfigFileApplicationContextInitializer.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/EnvironmentDelegateApplicationContextInitializer.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/SpringApplication.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/PropertyPlaceholderAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/data/JpaRepositoriesAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/data/JpaRepositoriesAutoConfigureRegistrar.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/jdbc/EmbeddedDatabaseAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/orm/jpa/JpaAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/web/EmbeddedJettyAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/web/EmbeddedTomcatAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/autoconfigure/web/WebMvcAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/bind/CustomPropertyConstructor.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/bind/PropertiesConfigurationFactory.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/bind/PropertySourcesBindingPostProcessor.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/bind/PropertySourcesPropertyValues.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/bind/RelaxedDataBinder.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/bind/YamlConfigurationFactory.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/config/YamlMapFactoryBean.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/config/YamlProcessor.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/config/YamlPropertiesFactoryBean.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/AbstractOnBeanCondition.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/AutoConfigurationUtils.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/ConditionalOnBean.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/ConditionalOnClass.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/ConditionalOnExpression.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/ConditionalOnMissingBean.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/ConfigurationProperties.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/EnableAutoConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/EnableAutoConfigurationImportSelector.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/ExpressionCondition.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/OnBeanCondition.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/OnClassCondition.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/annotation/OnMissingBeanCondition.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/AbstractEmbeddedServletContainerFactory.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/AnnotationConfigEmbeddedWebApplicationContext.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/EmbeddedServletContainer.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/EmbeddedServletContainerException.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/EmbeddedServletContainerFactory.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/EmbeddedWebApplicationContext.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/ErrorPage.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/FilterRegistrationBean.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/RegistrationBean.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/ServletRegistrationBean.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/XmlEmbeddedWebApplicationContext.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/jetty/JettyEmbeddedServletContainer.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/jetty/JettyEmbeddedServletContainerFactory.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/jetty/ServletContextInitializerConfiguration.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/jetty/package-info.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/package-info.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/tomcat/ServletContextInitializerLifecycleListener.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/tomcat/TomcatEmbeddedServletContainer.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/context/embedded/tomcat/package-info.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/logging/JavaLoggerConfigurer.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/logging/LogbackConfigurer.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/logging/LoggingInitializer.java create mode 100644 spring-bootstrap/src/main/java/org/springframework/bootstrap/maven/PropertiesMergingResourceTransformer.java create mode 100644 spring-bootstrap/src/main/resources/META-INF/spring.factories create mode 100644 spring-bootstrap/src/main/resources/org/springframework/bootstrap/logging/log4j.properties create mode 100644 spring-bootstrap/src/main/resources/org/springframework/bootstrap/logging/logback.xml create mode 100644 spring-bootstrap/src/main/resources/org/springframework/bootstrap/logging/logging.properties create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/BeanDefinitionLoaderTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/ConfigFileApplicationContextInitializerTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/EnvironmentDelegateApplicationContextInitializerTest.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/SpringApplicationTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/bind/PropertiesConfigurationFactoryTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/bind/PropertySourcesPropertyValuesTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/bind/RelaxedDataBinderTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/bind/YamlConfigurationFactoryTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/AnnotationConfigEmbeddedWebApplicationContextTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/EmbeddedWebApplicationContextTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/ExampleFilter.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/ExampleServlet.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/FilterRegistrationBeanTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/MockEmbeddedServletContainerFactory.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/MockFilter.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/MockServlet.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/ServletRegistrationBeanTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/XmlEmbeddedWebApplicationContextTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/config/ExampleEmbeddedWebApplicationConfiguration.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/logging/JavaLoggerConfigurerTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/logging/LogbackConfigurerTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/logging/LoggingInitializerTests.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/logging/TestFormatter.java create mode 100644 spring-bootstrap/src/test/java/org/springframework/bootstrap/sampleconfig/MyComponent.java create mode 100644 spring-bootstrap/src/test/resources/enableprofile-myprofile.properties create mode 100644 spring-bootstrap/src/test/resources/enableprofile.properties create mode 100644 spring-bootstrap/src/test/resources/logback-nondefault.xml create mode 100644 spring-bootstrap/src/test/resources/logback-test.xml create mode 100644 spring-bootstrap/src/test/resources/logging-nondefault.properties create mode 100644 spring-bootstrap/src/test/resources/org/springframework/bootstrap/context/embedded/exampleEmbeddedWebApplicationConfiguration.xml create mode 100644 spring-bootstrap/src/test/resources/org/springframework/bootstrap/sample-beans.xml create mode 100644 spring-bootstrap/src/test/resources/specificfile-specificprofile.properties create mode 100644 spring-bootstrap/src/test/resources/specificlocation.properties create mode 100644 spring-bootstrap/src/test/resources/testprofiles.yml create mode 100644 spring-bootstrap/src/test/resources/testproperties.properties create mode 100644 spring-bootstrap/src/test/resources/testsetprofiles.yml create mode 100644 spring-bootstrap/src/test/resources/testyaml.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..67bd5155b29 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +.gradle +*.sw? +.#* +*# +/build +.classpath +.project +.settings +bin +build +target diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000000..d7d0dce8b32 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: java + +install: mvn -U install --quiet -DskipTests=true +script: mvn clean test + diff --git a/README.md b/README.md index e69de29bb2d..f508a7bb979 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,111 @@ +# Spring Bootstrap +Experimental work based on discussions at SpringOne2GX 2012. See also the 'bootstrap' branch of Spring. + + +## Elevator Pitch +Opinionated view of the Spring family so that new users can quickly get to the 'meat and potatoes'. Assumes no knowledge of the Java development ecosystem. Absolutely no code generation and no XML. + + +## Installing +You need to build from source for now, but when it's done instructions will look like this: + +1) Get Java +Download and install the Java SDK from www.java.com + +2) Get Spring +`curl -s try.springsource.org | bash` or use the Windows installer + +3) Get to Work! +spr run yoursourcefile.groovy + + +## What? It's Groovy then? or like Grails? or another Roo? +There is a command line tool that uses Groovy underneath so that we can present simple snippets that can just run: + + @Controller + class ThisWillActuallyRun { + + @RequestMapping("/") + @ResponseBody + String home() { + return "Hello World!" + } + } + +By inspecting the code for well known annotations we can `@Grab` appropriate dependencies and also dynamically add `import` statements. Groovy makes this really easy. + +If you don't want to use the command line tool, and you would rather work using Java and an IDE you can. Just add a `main()` method that calls `SpringApplication` and add `@EnableAutoConfiguration`: + + import org.springframework.bootstrap.*; + import org.springframework.context.annotation.*; + + @Configuration + @EnableAutoConfiguration + @ComponentScan + public class MyApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(MyApplication.class, args); + } + + } + + + import org.springframework.beans.factory.annotation.*; + import org.springframework.stereotype.*; + import org.springframework.web.bind.annotation.*; + + @Controller + public class SampleController { + + @RequestMapping("/") + @ResponseBody + String home() { + return "Hello World!" + } +} + +## Under the hood +There are a number of disparate parts of Bootstrap. Here are the important classes: + +### The Spring CLI +The 'spr' command line application compiles and runs Groovy source, adding `import` statements and `@Grab` annotations. The application can also watch files, automatically recompiling and restarting when they change. + +### SpringApplication +The `SpringApplication` class provides the main entry point for a standalone Spring Application. Its sole job is to create and refresh an appropriate Spring `ApplicationContext`. Any contained beans that implements `CommandLineRunner` will be executed after the context has started. A `SpringApplication` can load beans from a number of different sources, including classes, packages (scanned) or XML files. By default a `AnnotationConfigApplicationContext` or `AnnotationConfigEmbeddedWebApplicationContext` depending on your classpath. + +### EmbeddedWebApplicationContext +The `EmbeddedWebApplicationContext` will probably be part of Spring 4.0. It provides a Spring 'WebApplicationContext' that can bootstrap itself and start and embedded servlet container. Support is provided for Tomcat and Jetty. + +### @EnableAutoConfigure +The `@EnableAutoConfigure` can be used on a `@Configuration` class to trigger auto-configuration of the Spring context. Auto-configuration attempts to guess what beans a user might want based on their classpath. For example, If a 'HSQLDB' is on the classpath the user probably wants an in-memory database to be defined. Auto-configuration will back away as the user starts to define their own beans. + +### @Conditional +The `@Conditional` annotation will probably be part of Spring 4.0. It provides allows `@Configuration` classes to be skipped depending on conditions. Bootstrap provides `@ConditionalOnBean`, `@ConditionalOnMissingBean` and `@ConditionalOnClass` annotations are used when defining auto-configuration classes. + +## Building the code +Use maven to build the source code. + + mvn clean install + +## Importing into eclipse +You can use m2e or `maven eclipse:eclipse`. + +Project specific settings are configured for source formatting. If you are using m2e please follow these steps to install eclipse support: + +* Select `Install new software` from the `help` menu +* Click `Add...` to add a new repository +* Click the `Archive...` button +* Select `org.eclipse.m2e.maveneclipse.site-0.0.1-SNAPSHOT-site.zip` from the `eclipse` folder in this checkout +* Install "Maven Integration for the maven-eclipse-plugin" + +If you prefer you can import settings manually from the `/eclipse` folder. + +## Samples +The following samples are included. To run use `java -jar -full.jar` + +* spring-bootstrap-simple-sample - A simple command line application +* spring-bootstrap-jetty-sample - Embedded Jetty +* spring-bootstrap-tomcat-sample - Embedded Tomcat +* spring-bootstrap-data-sample - Spring Data JPA + Hibernate + HSQLDB + diff --git a/eclipse/eclipse-code-formatter.xml b/eclipse/eclipse-code-formatter.xml new file mode 100644 index 00000000000..8f4b3eb5f3f --- /dev/null +++ b/eclipse/eclipse-code-formatter.xml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eclipse/org.eclipse.jdt.core.prefs b/eclipse/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..f544b17104a --- /dev/null +++ b/eclipse/org.eclipse.jdt.core.prefs @@ -0,0 +1,385 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.doc.comment.support=enabled +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning +org.eclipse.jdt.core.compiler.problem.deadCode=warning +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=default +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=ignore +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=false +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert +org.eclipse.jdt.core.formatter.comment.line_length=90 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.jdt.core.formatter.indentation.size=8 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=90 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=tab +org.eclipse.jdt.core.formatter.tabulation.size=4 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/eclipse/org.eclipse.jdt.ui.prefs b/eclipse/org.eclipse.jdt.ui.prefs new file mode 100644 index 00000000000..ed909fa6ba3 --- /dev/null +++ b/eclipse/org.eclipse.jdt.ui.prefs @@ -0,0 +1,66 @@ +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_profile=_Spring Java Conventions +formatter_settings_version=12 +org.eclipse.jdt.ui.exception.name=e +org.eclipse.jdt.ui.gettersetter.use.is=false +org.eclipse.jdt.ui.ignorelowercasenames=true +org.eclipse.jdt.ui.importorder=java;javax;org;com;\#; +org.eclipse.jdt.ui.javadoc=true +org.eclipse.jdt.ui.keywordthis=false +org.eclipse.jdt.ui.ondemandthreshold=9999 +org.eclipse.jdt.ui.overrideannotation=true +org.eclipse.jdt.ui.staticondemandthreshold=9999 +org.eclipse.jdt.ui.text.custom_code_templates= +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_missing_override_annotations_interface_methods=false +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=true +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.make_local_variable_final=false +sp_cleanup.make_parameters_final=false +sp_cleanup.make_private_fields_final=false +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=true +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_trailing_whitespaces=false +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=false +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_blocks=false +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=true +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/eclipse/org.eclipse.m2e.maveneclipse.site-0.0.1-SNAPSHOT-site.zip b/eclipse/org.eclipse.m2e.maveneclipse.site-0.0.1-SNAPSHOT-site.zip new file mode 100644 index 0000000000000000000000000000000000000000..b70672321c8f3dcdffa3296ad730eba83b5ea60c GIT binary patch literal 43049 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000000..e62b82e8ec6 --- /dev/null +++ b/pom.xml @@ -0,0 +1,398 @@ + + + 4.0.0 + org.springframework.bootstrap + spring-bootstrap-parent + 0.0.1-SNAPSHOT + pom + + 3.0.0 + + + spring-bootstrap + spring-bootstrap-service + spring-bootstrap-applications + spring-bootstrap-launcher + spring-bootstrap-samples + spring-bootstrap-cli + + + 1.6 + UTF-8 + 4.0.0.BOOTSTRAP-SNAPSHOT + 1.0.0.CI-SNAPSHOT + ${project.basedir} + + + + spring-snapshots + Spring Snapshots + http://maven.springframework.org/snapshot + + true + + + + + + + + maven-assembly-plugin + 2.4 + + + maven-clean-plugin + 2.5 + + + maven-compiler-plugin + 3.0 + + + maven-deploy-plugin + 2.7 + + + org.apache.maven.plugins + maven-dependency-plugin + 2.6 + + + maven-eclipse-plugin + 2.9 + + + maven-failsafe-plugin + 2.13 + + + maven-install-plugin + 2.4 + + + maven-jar-plugin + 2.4 + + + maven-resources-plugin + 2.6 + + + maven-shade-plugin + 2.0 + + + maven-surefire-plugin + 2.13 + + + maven-site-plugin + 3.2 + + + maven-source-plugin + 2.2.1 + + + maven-javadoc-plugin + 2.9 + + + + + + maven-compiler-plugin + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-eclipse-plugin + + false + + + .settings/org.eclipse.jdt.ui.prefs + ${main.basedir}/eclipse/org.eclipse.jdt.ui.prefs + + + .settings/org.eclipse.jdt.core.prefs + ${main.basedir}/eclipse/org.eclipse.jdt.core.prefs + + + + + + maven-javadoc-plugin + + + attach-javadocs + verify + + jar + + + + + + maven-source-plugin + + + attach-sources + verify + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*Tests.java + + + **/Abstract*.java + + junit:junit + + file:/dev/./urandom + + + + + org.codehaus.mojo + versions-maven-plugin + 2.0 + + + + + + + commons-httpclient + commons-httpclient + 3.1 + + + javax.servlet + javax.servlet-api + 3.0.1 + + + javax.persistence + persistence-api + 1.0.2 + + + junit + junit + 4.11 + + + org.slf4j + jcl-over-slf4j + 1.7.2 + + + org.slf4j + slf4j-api + 1.7.2 + + + org.slf4j + slf4j-log4j12 + 1.7.2 + + + org.slf4j + slf4j-jdk14 + 1.7.2 + + + log4j + log4j + 1.2.17 + + + ch.qos.logback + logback-classic + 1.0.7 + + + com.fasterxml.jackson.core + jackson-databind + 2.1.4 + + + com.fasterxml.jackson.core + jackson-core + 2.1.4 + + + org.apache.tomcat.embed + tomcat-embed-core + 7.0.39 + + + org.apache.tomcat.embed + tomcat-embed-logging-juli + 7.0.39 + + + org.apache.tomcat.embed + tomcat-embed-jasper + 7.0.39 + + + org.codehaus.groovy + groovy + 2.1.2 + + + org.eclipse.jetty + jetty-webapp + 8.1.9.v20130131 + + + javax.servlet + org.eclipse.jetty.orbit + + + + + org.eclipse.jetty + jetty-util + 8.1.9.v20130131 + + + org.eclipse.jetty + jetty-jsp + 8.1.9.v20130131 + + + org.hamcrest + hamcrest-library + 1.3 + + + org.hibernate + hibernate-entitymanager + 4.1.9.Final + + + org.hsqldb + hsqldb + 2.2.9 + + + org.mockito + mockito-core + 1.9.5 + + + org.springframework.security + spring-security-javaconfig + ${dependency.security.javaconfig.version} + + + org.springframework + spring-aop + ${dependency.springframework.version} + + + org.springframework + spring-expression + ${dependency.springframework.version} + + + org.springframework + spring-core + ${dependency.springframework.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-context + ${dependency.springframework.version} + + + org.springframework + spring-web + ${dependency.springframework.version} + + + org.springframework + spring-webmvc + ${dependency.springframework.version} + + + org.springframework + spring-jdbc + ${dependency.springframework.version} + + + org.springframework + spring-orm + ${dependency.springframework.version} + + + org.springframework + spring-test + ${dependency.springframework.version} + + + org.springframework + spring-tx + ${dependency.springframework.version} + + + org.springframework.data + spring-data-jpa + 1.3.0.RELEASE + + + org.springframework + spring-jdbc + + + org.springframework + spring-orm + + + + + org.yaml + snakeyaml + 1.12 + + + + + + junit + junit + test + + + org.mockito + mockito-core + test + + + org.hamcrest + hamcrest-library + test + + + diff --git a/spring-bootstrap-applications/pom.xml b/spring-bootstrap-applications/pom.xml new file mode 100644 index 00000000000..aa7edccbdd3 --- /dev/null +++ b/spring-bootstrap-applications/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + org.springframework.bootstrap + spring-bootstrap-parent + 0.0.1-SNAPSHOT + + spring-bootstrap-applications + pom + + ${project.basedir}/.. + + + spring-bootstrap-application + spring-bootstrap-batch-application + spring-bootstrap-integration-application + spring-bootstrap-jpa-application + spring-bootstrap-web-application + + diff --git a/spring-bootstrap-applications/spring-bootstrap-application/pom.xml b/spring-bootstrap-applications/spring-bootstrap-application/pom.xml new file mode 100644 index 00000000000..4b3f15c92e4 --- /dev/null +++ b/spring-bootstrap-applications/spring-bootstrap-application/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + org.springframework.bootstrap + spring-bootstrap-applications + 0.0.1-SNAPSHOT + + spring-bootstrap-application + jar + + ${project.basedir}/../.. + + + + ${project.groupId} + spring-bootstrap + ${project.version} + runtime + + + org.slf4j + slf4j-jdk14 + runtime + + + diff --git a/spring-bootstrap-applications/spring-bootstrap-batch-application/pom.xml b/spring-bootstrap-applications/spring-bootstrap-batch-application/pom.xml new file mode 100644 index 00000000000..d928b43c37a --- /dev/null +++ b/spring-bootstrap-applications/spring-bootstrap-batch-application/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + org.springframework.bootstrap + spring-bootstrap-applications + 0.0.1-SNAPSHOT + + spring-bootstrap-batch-application + pom + + ${project.basedir}/../.. + + + + ${project.groupId} + spring-bootstrap-application + ${project.version} + pom + + + diff --git a/spring-bootstrap-applications/spring-bootstrap-integration-application/pom.xml b/spring-bootstrap-applications/spring-bootstrap-integration-application/pom.xml new file mode 100644 index 00000000000..b1c3ed41e6d --- /dev/null +++ b/spring-bootstrap-applications/spring-bootstrap-integration-application/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + org.springframework.bootstrap + spring-bootstrap-applications + 0.0.1-SNAPSHOT + + spring-bootstrap-integration-application + pom + + ${project.basedir}/../.. + + + + ${project.groupId} + spring-bootstrap-application + ${project.version} + + + diff --git a/spring-bootstrap-applications/spring-bootstrap-jpa-application/pom.xml b/spring-bootstrap-applications/spring-bootstrap-jpa-application/pom.xml new file mode 100644 index 00000000000..7d45568e474 --- /dev/null +++ b/spring-bootstrap-applications/spring-bootstrap-jpa-application/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + org.springframework.bootstrap + spring-bootstrap-applications + 0.0.1-SNAPSHOT + + spring-bootstrap-jpa-application + pom + + ${project.basedir}/../.. + + + + ${project.groupId} + spring-bootstrap-application + ${project.version} + + + diff --git a/spring-bootstrap-applications/spring-bootstrap-web-application/pom.xml b/spring-bootstrap-applications/spring-bootstrap-web-application/pom.xml new file mode 100644 index 00000000000..0d212d8a7fd --- /dev/null +++ b/spring-bootstrap-applications/spring-bootstrap-web-application/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + org.springframework.bootstrap + spring-bootstrap-applications + 0.0.1-SNAPSHOT + + spring-bootstrap-web-application + jar + + ${project.basedir}/../.. + + + + ${project.groupId} + spring-bootstrap-application + ${project.version} + + + org.eclipse.jetty + jetty-webapp + + + org.eclipse.jetty + jetty-util + + + org.springframework + spring-webmvc + + + commons-logging + commons-logging + + + + + javax.servlet + javax.servlet-api + + + diff --git a/spring-bootstrap-cli/dependency-reduced-pom.xml b/spring-bootstrap-cli/dependency-reduced-pom.xml new file mode 100644 index 00000000000..22577eb5a7d --- /dev/null +++ b/spring-bootstrap-cli/dependency-reduced-pom.xml @@ -0,0 +1,127 @@ + + + + spring-bootstrap-parent + org.springframework.bootstrap + 0.0.1-SNAPSHOT + + 4.0.0 + spring-bootstrap-cli + + + + maven-shade-plugin + + + package + + shade + + + + + META-INF/spring.handlers + + + META-INF/spring.factories + + + META-INF/spring.schemas + + + + ${start-class} + + + + + + + + ${project.groupId} + spring-bootstrap + ${project.version} + + + + true + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + maven-assembly-plugin + + + make-distribution + install + + single + + + + false + + + src/main/assembly/descriptor.xml + + + + + + + + junit + junit + 4.11 + test + + + hamcrest-core + org.hamcrest + + + + + org.mockito + mockito-core + 1.9.5 + test + + + objenesis + org.objenesis + + + hamcrest-core + org.hamcrest + + + + + org.hamcrest + hamcrest-library + 1.3 + test + + + hamcrest-core + org.hamcrest + + + + + + ${project.basedir}/.. + org.springframework.bootstrap.cli.SpringBootstrapCli + + + diff --git a/spring-bootstrap-cli/pom.xml b/spring-bootstrap-cli/pom.xml new file mode 100644 index 00000000000..d153b35172a --- /dev/null +++ b/spring-bootstrap-cli/pom.xml @@ -0,0 +1,107 @@ + + + 4.0.0 + + org.springframework.bootstrap + spring-bootstrap-parent + 0.0.1-SNAPSHOT + + spring-bootstrap-cli + jar + + ${project.basedir}/.. + org.springframework.bootstrap.cli.SpringBootstrapCli + + + + + maven-shade-plugin + + + ${project.groupId} + spring-bootstrap + ${project.version} + + + + true + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + package + + shade + + + + + META-INF/spring.handlers + + + META-INF/spring.factories + + + META-INF/spring.schemas + + + + ${start-class} + + + + + + + + maven-assembly-plugin + false + + + src/main/assembly/descriptor.xml + + + + + make-distribution + install + + single + + + + + + + + + org.codehaus.groovy + groovy + + + org.apache.ivy + ivy + 2.3.0 + + + net.sf.jopt-simple + jopt-simple + 4.4 + + + diff --git a/spring-bootstrap-cli/samples/app.groovy b/spring-bootstrap-cli/samples/app.groovy new file mode 100644 index 00000000000..9d2864a4d66 --- /dev/null +++ b/spring-bootstrap-cli/samples/app.groovy @@ -0,0 +1,29 @@ +package org.test + +@GrabResolver(name='spring-milestone', root='http://repo.springframework.org/milestone') +@GrabResolver(name='spring-snapshot', root='http://repo.springframework.org/snapshot') +@Grab("org.springframework.bootstrap:spring-bootstrap:0.0.1-SNAPSHOT") +@Grab("org.springframework:spring-context:4.0.0.BOOTSTRAP-SNAPSHOT") + +@org.springframework.bootstrap.context.annotation.EnableAutoConfiguration +@org.springframework.stereotype.Component +class Example implements org.springframework.bootstrap.CommandLineRunner { + + @org.springframework.beans.factory.annotation.Autowired + private MyService myService; + + public void run(String... args) { + print "Hello " + this.myService.sayWorld(); + } +} + + +@org.springframework.stereotype.Service +class MyService { + + public String sayWorld() { + return "World!"; + } +} + + diff --git a/spring-bootstrap-cli/samples/web.groovy b/spring-bootstrap-cli/samples/web.groovy new file mode 100644 index 00000000000..041e5f60f08 --- /dev/null +++ b/spring-bootstrap-cli/samples/web.groovy @@ -0,0 +1,24 @@ +@org.springframework.bootstrap.context.annotation.EnableAutoConfiguration +@Controller +class Example { + + @Autowired + private MyService myService; + + @RequestMapping("/") + @ResponseBody + public String helloWorld() { + return myService.sayWorld(); + } + +} + +@Service +class MyService { + + public String sayWorld() { + return "World!"; + } +} + + diff --git a/spring-bootstrap-cli/src/main/assembly/descriptor.xml b/spring-bootstrap-cli/src/main/assembly/descriptor.xml new file mode 100644 index 00000000000..e186aba31df --- /dev/null +++ b/spring-bootstrap-cli/src/main/assembly/descriptor.xml @@ -0,0 +1,30 @@ + + dist + + zip + dir + + spring-${project.version} + true + + + src/main/scripts + bin + true + + + src/main/resources + bin + true + true + + + + + + org.springframework.bootstrap:spring-bootstrap-cli:jar:* + + lib + + + diff --git a/spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/AbstractCommand.java b/spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/AbstractCommand.java new file mode 100644 index 00000000000..945b01aff5c --- /dev/null +++ b/spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/AbstractCommand.java @@ -0,0 +1,81 @@ +/* + * Copyright 2012-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.bootstrap.cli; + +import java.io.IOException; +import java.io.PrintStream; + +/** + * Abstract {@link Command} implementation. + * + * @author Phillip Webb + */ +public abstract class AbstractCommand implements Command { + + private String name; + + private boolean optionCommand; + + private String description; + + /** + * Create a new {@link AbstractCommand} instance. + * @param name the name of the command + * @param description the command description + */ + public AbstractCommand(String name, String description) { + this(name, description, false); + } + + /** + * Create a new {@link AbstractCommand} instance. + * @param name the name of the command + * @param description the command description + * @param optionCommand if this command is an option command (see + * {@link Command#isOptionCommand()} + */ + public AbstractCommand(String name, String description, boolean optionCommand) { + this.name = name; + this.description = description; + this.optionCommand = optionCommand; + } + + @Override + public String getName() { + return this.name; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public boolean isOptionCommand() { + return this.optionCommand; + } + + @Override + public String getUsageHelp() { + return null; + } + + @Override + public void printHelp(PrintStream out) throws IOException { + } + +} diff --git a/spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/BootstrapCliException.java b/spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/BootstrapCliException.java new file mode 100644 index 00000000000..f8e59e31944 --- /dev/null +++ b/spring-bootstrap-cli/src/main/java/org/springframework/bootstrap/cli/BootstrapCliException.java @@ -0,0 +1,96 @@ +/* + * Copyright 2012-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.bootstrap.cli; + +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Set; + +/** + * Runtime exception wrapper that defines additional {@link Option}s that are understood + * by the {@link SpringBootstrapCli}. + * + * @author Phillip Webb + */ +public class BootstrapCliException extends RuntimeException { + + private static final long serialVersionUID = 0L; + + private final EnumSet