Fix tests
diff --git a/functional-tests/build.gradle b/functional-tests/build.gradle
index 556702d..115a44e 100644
--- a/functional-tests/build.gradle
+++ b/functional-tests/build.gradle
@@ -48,12 +48,14 @@
     }
     applyMavenExclusions false
 }
+
 configurations.all {
     resolutionStrategy.eachDependency { DependencyResolveDetails details ->
         if(details.requested.group == 'org.grails' && details.requested.name.startsWith('grails-datastore')) {
             details.useVersion("$gormVersion")
         }
     }
+    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
 }
 
 dependencies {
@@ -93,6 +95,7 @@
         exceptionFormat = 'full'
     }
 }
+
 task wrapper(type: Wrapper) {
     gradleVersion = gradleWrapperVersion
 }
diff --git a/functional-tests/grails-app/domain/functional/tests/Team.groovy b/functional-tests/grails-app/domain/functional/tests/Team.groovy
index 32e48fc..b2ec2c8 100644
--- a/functional-tests/grails-app/domain/functional/tests/Team.groovy
+++ b/functional-tests/grails-app/domain/functional/tests/Team.groovy
@@ -7,5 +7,5 @@
     String name
     Player captain
     List players
-    static hasMany = [players:Player]
+    static hasMany = [players: Player]
 }
\ No newline at end of file
diff --git a/functional-tests/src/integration-test/groovy/functional/tests/HttpClientSpec.groovy b/functional-tests/src/integration-test/groovy/functional/tests/HttpClientSpec.groovy
index fd94e55..1a34a85 100644
--- a/functional-tests/src/integration-test/groovy/functional/tests/HttpClientSpec.groovy
+++ b/functional-tests/src/integration-test/groovy/functional/tests/HttpClientSpec.groovy
@@ -1,11 +1,16 @@
 package functional.tests
 
 import grails.testing.spock.OnceBefore
+import io.micronaut.http.client.DefaultHttpClient
+import io.micronaut.http.client.DefaultHttpClientConfiguration
 import io.micronaut.http.client.HttpClient
+import io.micronaut.http.client.HttpClientConfiguration
 import spock.lang.AutoCleanup
 import spock.lang.Shared
 import spock.lang.Specification
 
+import java.time.Duration
+
 class HttpClientSpec extends Specification {
 
     @Shared
@@ -18,6 +23,8 @@
     @OnceBefore
     void init() {
         this.baseUrl = "http://localhost:$serverPort"
-        this.client  = HttpClient.create(new URL(baseUrl))
+        DefaultHttpClientConfiguration configuration = new DefaultHttpClientConfiguration()
+        configuration.setReadTimeout(Duration.ofMinutes(5))
+        this.client  = new DefaultHttpClient(new URL(baseUrl), configuration)
     }
 }
diff --git a/functional-tests/src/integration-test/groovy/functional/tests/TeamSpec.groovy b/functional-tests/src/integration-test/groovy/functional/tests/TeamSpec.groovy
index a6804e8..a8a30c2 100644
--- a/functional-tests/src/integration-test/groovy/functional/tests/TeamSpec.groovy
+++ b/functional-tests/src/integration-test/groovy/functional/tests/TeamSpec.groovy
@@ -53,8 +53,7 @@
 
         resp.headers.getFirst(HttpHeaders.CONTENT_TYPE).isPresent()
         resp.headers.getFirst(HttpHeaders.CONTENT_TYPE).get() == 'application/hal+json;charset=UTF-8'
-        resp.body() == '{"_embedded":{"captain":{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/1","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Iniesta","version":0},"players":[{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/1","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Iniesta","version":0},{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/2","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Messi","version":0}]},"_links":{"self":{"href":"http://localhost:'+serverPort+'/teams/1","hreflang":"' + lang + '","type":"application/hal+json"}},"id":1,"name":"Barcelona","sport":"football","another":{"foo":"bar"}}'
-
+        resp.body() == '{"_embedded":{"players":[{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/1","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Iniesta","version":0},{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/2","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Messi","version":0}],"captain":{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/1","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Iniesta","version":0}},"_links":{"self":{"href":"http://localhost:'+serverPort+'/teams/1","hreflang":"' + lang + '","type":"application/hal+json"}},"id":1,"name":"Barcelona","sport":"football","another":{"foo":"bar"}}'
     }
 
     void "Test composite ID rendering"() {
@@ -71,6 +70,6 @@
         resp.status == HttpStatus.OK
         resp.headers.getFirst(HttpHeaders.CONTENT_TYPE).isPresent()
         resp.headers.getFirst(HttpHeaders.CONTENT_TYPE).get() == 'application/json;charset=UTF-8'
-        resp.body() == '{"player":{"id":2,"name":"Messi","sport":"football"},"team":{"id":1,"captain":{"id":1},"name":"Barcelona","sport":"football"},"name":"foo"}'
+        resp.body() == '{"player":{"id":2,"name":"Messi","sport":"football"},"team":{"id":1,"name":"Barcelona","captain":{"id":1},"sport":"football"},"name":"foo"}'
     }
 }
diff --git a/json-templates/build.gradle b/json-templates/build.gradle
index 1f6502f..aa054a4 100644
--- a/json-templates/build.gradle
+++ b/json-templates/build.gradle
@@ -50,10 +50,6 @@
 
 classes.dependsOn(compileViews)
 
-jar {
-    from sourceSets.main.output
-}
-
 // Used for publishing to central repository, remove if not needed
 apply from:'../publishing/grailsCentralPublishing.gradle'
 apply from:'../publishing/bintrayPublishing.gradle'
diff --git a/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultHalViewHelper.groovy b/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultHalViewHelper.groovy
index c7dbe80..3c0cd99 100644
--- a/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultHalViewHelper.groovy
+++ b/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultHalViewHelper.groovy
@@ -26,6 +26,8 @@
 import org.grails.datastore.mapping.reflect.EntityReflector
 import org.springframework.http.HttpMethod
 
+import java.lang.reflect.Field
+
 /**
  * Helps creating HAL links
  *
@@ -583,8 +585,11 @@
 
         @Override
         void call(String name, Iterable coll, Closure c) throws IOException {
+            Field field = delegate.getClass().getDeclaredField("first")
+            field.setAccessible(true)
+            field.set(delegate, false)
             writeName(name)
-            verifyValue();
+            verifyValue()
             def w = writer
             w.write(JsonOutput.OPEN_BRACKET)
             boolean first = true
@@ -598,7 +603,6 @@
                 writeObject( it, c)
             }
             w.write(JsonOutput.CLOSE_BRACKET)
-
         }
 
         @Override
diff --git a/json/src/test/groovy/grails/plugin/json/view/api/JsonApiSpec.groovy b/json/src/test/groovy/grails/plugin/json/view/api/JsonApiSpec.groovy
index 746d14f..ccd6709 100644
--- a/json/src/test/groovy/grails/plugin/json/view/api/JsonApiSpec.groovy
+++ b/json/src/test/groovy/grails/plugin/json/view/api/JsonApiSpec.groovy
@@ -9,6 +9,7 @@
 import spock.lang.Specification
 
 class JsonApiSpec extends Specification implements JsonViewTest, GrailsUnitTest {
+
     void setup() {
         mappingContext.addPersistentEntities(Widget, Author, Book, ResearchPaper)
     }
@@ -89,7 +90,6 @@
         given:
             SuperHero mutepool = new SuperHero()
             mutepool.name = ""
-            mutepool.id = 5
             mutepool.validate()
 
         when:
@@ -227,7 +227,6 @@
     String name
 }
 
-@Entity
 class SuperHero implements Validateable {
     String name
 
diff --git a/markup/build.gradle b/markup/build.gradle
index 672cbc6..b1c3326 100644
--- a/markup/build.gradle
+++ b/markup/build.gradle
@@ -55,18 +55,12 @@
 }
 
 dependencies {
-    provided 'org.springframework.boot:spring-boot-starter-logging'
-    provided "org.springframework.boot:spring-boot-starter-actuator"
-    provided "org.springframework.boot:spring-boot-autoconfigure"
-    provided "org.springframework.boot:spring-boot-starter-tomcat"
-
-    provided "org.grails:grails-web-boot"
-    provided "org.grails:grails-dependencies"
-    provided 'javax.servlet:javax.servlet-api:3.1.0'
+    compile "org.grails:grails-core:$grailsVersion"
 
     compile project(":views-core")
 
     testCompile "org.grails:grails-plugin-testing"
+    testCompile "org.grails:grails-web-testing-support:$testingSupportVersion"
 
     console "org.grails:grails-console"
 }