diff --git a/initializr-actuator/src/main/groovy/io/spring/initializr/actuate/stat/BasicAuthRestTemplate.groovy b/initializr-actuator/src/main/groovy/io/spring/initializr/actuate/stat/BasicAuthRestTemplate.groovy
deleted file mode 100644
index 32d9c5c4..00000000
--- a/initializr-actuator/src/main/groovy/io/spring/initializr/actuate/stat/BasicAuthRestTemplate.groovy
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2012-2016 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 io.spring.initializr.actuate.stat
-
-import java.nio.charset.StandardCharsets
-
-import org.springframework.http.HttpRequest
-import org.springframework.http.client.ClientHttpRequestExecution
-import org.springframework.http.client.ClientHttpRequestInterceptor
-import org.springframework.http.client.ClientHttpResponse
-import org.springframework.http.client.InterceptingClientHttpRequestFactory
-import org.springframework.util.Base64Utils
-import org.springframework.web.client.RestTemplate
-
-/**
- * A simple {@link RestTemplate} extension that automatically provides the
- * {@code Authorization} header if credentials are provided.
- *
- * Largely inspired from Spring Boot's {@code TestRestTemplate}.
- *
- * @author Stephane Nicoll
- * @since 1.0
- */
-class BasicAuthRestTemplate extends RestTemplate {
-
- /**
- * Create a new instance. {@code username} and {@code password} can be
- * {@code null} if no authentication is necessary.
- */
- BasicAuthRestTemplate(String username, String password) {
- addAuthentication(username, password)
- }
-
- private void addAuthentication(String username, String password) {
- if (!username) {
- return;
- }
- List interceptors = Collections
- . singletonList(
- new BasicAuthorizationInterceptor(username, password))
- setRequestFactory(new InterceptingClientHttpRequestFactory(getRequestFactory(),
- interceptors))
- }
-
- private static class BasicAuthorizationInterceptor
- implements ClientHttpRequestInterceptor {
-
- private final String username
-
- private final String password
-
- BasicAuthorizationInterceptor(String username, String password) {
- this.username = username;
- this.password = (password == null ? "" : password)
- }
-
- @Override
- public ClientHttpResponse intercept(HttpRequest request, byte[] body,
- ClientHttpRequestExecution execution) throws IOException {
- String token = Base64Utils.encodeToString(
- (this.username + ":" + this.password).getBytes(StandardCharsets.UTF_8))
- request.getHeaders().add("Authorization", "Basic " + token)
- return execution.execute(request, body)
- }
-
- }
-
-}
diff --git a/initializr-actuator/src/main/groovy/io/spring/initializr/actuate/stat/ProjectGenerationStatPublisher.groovy b/initializr-actuator/src/main/groovy/io/spring/initializr/actuate/stat/ProjectGenerationStatPublisher.groovy
index 88243a04..11fffb32 100644
--- a/initializr-actuator/src/main/groovy/io/spring/initializr/actuate/stat/ProjectGenerationStatPublisher.groovy
+++ b/initializr-actuator/src/main/groovy/io/spring/initializr/actuate/stat/ProjectGenerationStatPublisher.groovy
@@ -21,6 +21,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
import groovy.util.logging.Slf4j
import io.spring.initializr.generator.ProjectRequestEvent
+import org.springframework.boot.web.client.RestTemplateBuilder
import org.springframework.context.event.EventListener
import org.springframework.http.MediaType
import org.springframework.http.RequestEntity
@@ -51,8 +52,8 @@ class ProjectGenerationStatPublisher {
this.documentFactory = documentFactory
this.statsProperties = statsProperties
this.objectMapper = createObjectMapper()
- this.restTemplate = new BasicAuthRestTemplate(
- statsProperties.elastic.username, statsProperties.elastic.password)
+ this.restTemplate = new RestTemplateBuilder().basicAuthorization(
+ statsProperties.elastic.username, statsProperties.elastic.password).build()
this.retryTemplate = retryTemplate
}
diff --git a/initializr-actuator/src/test/groovy/io/spring/initializr/actuate/stat/MainControllerStatsIntegrationTests.groovy b/initializr-actuator/src/test/groovy/io/spring/initializr/actuate/stat/MainControllerStatsIntegrationTests.groovy
index 6db0a7a9..6638cf51 100644
--- a/initializr-actuator/src/test/groovy/io/spring/initializr/actuate/stat/MainControllerStatsIntegrationTests.groovy
+++ b/initializr-actuator/src/test/groovy/io/spring/initializr/actuate/stat/MainControllerStatsIntegrationTests.groovy
@@ -22,7 +22,7 @@ import org.junit.Before
import org.junit.Test
import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.SpringApplicationConfiguration
+import org.springframework.context.annotation.Import
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpStatus
import org.springframework.http.RequestEntity
@@ -44,7 +44,7 @@ import static org.junit.Assert.fail
*
* @author Stephane Nicoll
*/
-@SpringApplicationConfiguration(StatsMockController.class)
+@Import(StatsMockController)
@ActiveProfiles(['test-default', 'test-custom-stats'])
class MainControllerStatsIntegrationTests extends AbstractInitializrControllerIntegrationTests {
diff --git a/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy b/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy
index 7943eb75..ae253dd1 100644
--- a/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy
+++ b/initializr-generator/src/main/groovy/io/spring/initializr/metadata/Dependency.groovy
@@ -83,6 +83,7 @@ class Dependency extends MetadataElement {
String repository
+ @JsonInclude(JsonInclude.Include.NON_DEFAULT)
int weight
/**
diff --git a/initializr-service/pom.xml b/initializr-service/pom.xml
index f2c4e783..f85414ab 100644
--- a/initializr-service/pom.xml
+++ b/initializr-service/pom.xml
@@ -33,15 +33,43 @@
org.codehaus.gmavenplus
gmavenplus-plugin
+
+ pl.project13.maven
+ git-commit-id-plugin
+
+
+
+ revision
+
+
+
+
+ yyyy-MM-dd'T'HH:mm:ssZ
+ true
+ ${project.build.outputDirectory}/git.properties
+
+
org.springframework.boot
spring-boot-maven-plugin
+ repackage
repackage
+
+ build information
+
+ build-info
+
+
+
+ ${spring.boot.version}
+
+
+
diff --git a/initializr-service/src/main/resources/application.yml b/initializr-service/src/main/resources/application.yml
index 4b5deb26..f828fd25 100644
--- a/initializr-service/src/main/resources/application.yml
+++ b/initializr-service/src/main/resources/application.yml
@@ -1,11 +1,3 @@
-info:
- project:
- name: Spring Start
- version: 0.4.0
- # remember to update static/install.sh as well:
- spring-boot:
- version: 1.3.6.RELEASE
-
logging:
level:
org.springframework.core.env: warn
@@ -17,6 +9,11 @@ server:
mime-types: application/json,text/css,text/html
min-response-size: 2048
+spring:
+ jackson:
+ serialization:
+ write-dates-as-timestamps: false
+
initializr:
env:
boms:
@@ -753,3 +750,4 @@ initializr:
- name: 1.1.12
id: 1.1.12.RELEASE
default: false
+
diff --git a/initializr-web/pom.xml b/initializr-web/pom.xml
index de65b196..01df944a 100644
--- a/initializr-web/pom.xml
+++ b/initializr-web/pom.xml
@@ -20,6 +20,10 @@
org.springframework.boot
spring-boot-autoconfigure
+
+ org.springframework
+ spring-context-support
+
org.springframework
spring-webmvc
@@ -29,8 +33,8 @@
spring-hateoas
- com.google.guava
- guava
+ com.github.ben-manes.caffeine
+ caffeine
diff --git a/initializr-web/src/main/groovy/io/spring/initializr/web/autoconfigure/InitializrAutoConfiguration.groovy b/initializr-web/src/main/groovy/io/spring/initializr/web/autoconfigure/InitializrAutoConfiguration.groovy
index 158f5d58..2f17b7db 100644
--- a/initializr-web/src/main/groovy/io/spring/initializr/web/autoconfigure/InitializrAutoConfiguration.groovy
+++ b/initializr-web/src/main/groovy/io/spring/initializr/web/autoconfigure/InitializrAutoConfiguration.groovy
@@ -18,7 +18,7 @@ package io.spring.initializr.web.autoconfigure
import java.util.concurrent.TimeUnit
-import com.google.common.cache.CacheBuilder
+import com.github.benmanes.caffeine.cache.Caffeine
import io.spring.initializr.generator.ProjectGenerator
import io.spring.initializr.generator.ProjectRequestPostProcessor
import io.spring.initializr.generator.ProjectRequestResolver
@@ -35,8 +35,10 @@ import io.spring.initializr.web.ui.UiController
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.context.properties.EnableConfigurationProperties
+import org.springframework.cache.Cache
import org.springframework.cache.CacheManager
import org.springframework.cache.annotation.EnableCaching
+import org.springframework.cache.caffeine.CaffeineCache
import org.springframework.cache.concurrent.ConcurrentMapCache
import org.springframework.cache.support.SimpleCacheManager
import org.springframework.context.annotation.Bean
@@ -121,12 +123,11 @@ class InitializrAutoConfiguration {
cacheManager
}
- private static ConcurrentMapCache createConcurrentMapCache(Long timeToLive, String name) {
- def cacheBuilder = CacheBuilder.newBuilder()
+ private static Cache createConcurrentMapCache(Long timeToLive, String name) {
+ new CaffeineCache(name, Caffeine
+ .newBuilder()
.expireAfterWrite(timeToLive, TimeUnit.SECONDS)
-
- def map = cacheBuilder.build().asMap()
- new ConcurrentMapCache(name, map, false)
+ .build())
}
}
diff --git a/initializr-web/src/test/groovy/io/spring/initializr/web/AbstractInitializrControllerIntegrationTests.groovy b/initializr-web/src/test/groovy/io/spring/initializr/web/AbstractInitializrControllerIntegrationTests.groovy
index ba5948fd..a5f9000f 100644
--- a/initializr-web/src/test/groovy/io/spring/initializr/web/AbstractInitializrControllerIntegrationTests.groovy
+++ b/initializr-web/src/test/groovy/io/spring/initializr/web/AbstractInitializrControllerIntegrationTests.groovy
@@ -32,10 +32,9 @@ import org.junit.runner.RunWith
import org.skyscreamer.jsonassert.JSONAssert
import org.skyscreamer.jsonassert.JSONCompareMode
-import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
-import org.springframework.boot.test.IntegrationTest
-import org.springframework.boot.test.SpringApplicationConfiguration
+import org.springframework.boot.context.embedded.LocalServerPort
+import org.springframework.boot.test.context.SpringBootTest
import org.springframework.context.annotation.Bean
import org.springframework.core.io.ClassPathResource
import org.springframework.http.HttpEntity
@@ -43,20 +42,18 @@ import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner
-import org.springframework.test.context.web.WebAppConfiguration
+import org.springframework.test.context.junit4.SpringRunner
import org.springframework.util.StreamUtils
import org.springframework.web.client.RestTemplate
import static org.junit.Assert.assertTrue
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT
/**
* @author Stephane Nicoll
*/
-@RunWith(SpringJUnit4ClassRunner.class)
-@SpringApplicationConfiguration(classes = Config.class)
-@WebAppConfiguration
-@IntegrationTest('server.port=0')
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Config.class, webEnvironment = RANDOM_PORT)
abstract class AbstractInitializrControllerIntegrationTests {
static final MediaType CURRENT_METADATA_MEDIA_TYPE = InitializrMetadataVersion.V2_1.mediaType
@@ -65,7 +62,7 @@ abstract class AbstractInitializrControllerIntegrationTests {
@Rule
public final TemporaryFolder folder = new TemporaryFolder()
- @Value('${local.server.port}')
+ @LocalServerPort
protected int port
final RestTemplate restTemplate = new RestTemplate()
diff --git a/initializr-web/src/test/groovy/io/spring/initializr/web/project/ProjectGenerationPostProcessorTests.groovy b/initializr-web/src/test/groovy/io/spring/initializr/web/project/ProjectGenerationPostProcessorTests.groovy
index cfc7a372..ffbb7855 100644
--- a/initializr-web/src/test/groovy/io/spring/initializr/web/project/ProjectGenerationPostProcessorTests.groovy
+++ b/initializr-web/src/test/groovy/io/spring/initializr/web/project/ProjectGenerationPostProcessorTests.groovy
@@ -7,14 +7,14 @@ import io.spring.initializr.metadata.InitializrMetadata
import io.spring.initializr.web.AbstractInitializrControllerIntegrationTests
import org.junit.Test
-import org.springframework.boot.test.SpringApplicationConfiguration
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
+import org.springframework.context.annotation.Import
import org.springframework.core.annotation.Order
import org.springframework.test.context.ActiveProfiles
@ActiveProfiles('test-default')
-@SpringApplicationConfiguration(classes = [Config, ProjectRequestPostProcessorConfiguration])
+@Import(ProjectRequestPostProcessorConfiguration)
class ProjectGenerationPostProcessorTests extends AbstractInitializrControllerIntegrationTests {
diff --git a/pom.xml b/pom.xml
index 449750ef..dbcec3a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,9 +38,8 @@
UTF-8
- 2.43.1
- 1.3.6.RELEASE
- 1.7
+ 1.4.0.RELEASE
+ 1.8
@@ -86,21 +85,11 @@
pom
import
-
- com.google.guava
- guava
- 16.0
-
xmlunit
xmlunit
1.5
-
- org.skyscreamer
- jsonassert
- 1.2.3
-
org.gebish
geb-core
@@ -112,16 +101,6 @@
-
- org.seleniumhq.selenium
- selenium-support
- ${selenium.version}
-
-
- org.seleniumhq.selenium
- selenium-firefox-driver
- ${selenium.version}
-
@@ -195,6 +174,11 @@
spring-boot-maven-plugin
${spring.boot.version}
+
+ pl.project13.maven
+ git-commit-id-plugin
+ 2.1.11
+