mibrahim.iti
mibrahim.iti

Reputation: 2060

Gradle doesn't copy html files into executed jar

build.gradle

buildscript {
    ext {
        springBootVersion = '2.0.6.RELEASE'
        springRestDocsVersion = '2.0.2.RELEASE'
        gradleDockerVersion   = '1.2'
        asciidoctorGradlePluginVersion   = '1.5.9.2'
    }
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.asciidoctor:asciidoctor-gradle-plugin:${asciidoctorGradlePluginVersion}")
        classpath("se.transmode.gradle:gradle-docker:${gradleDockerVersion}")
    }
}

plugins {
  id "org.springframework.boot" version "2.0.6.RELEASE"
  id "org.asciidoctor.convert" version "1.5.9.2"
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.asciidoctor.convert'
apply plugin: 'application'
apply plugin: 'docker'

apply from: 'local.gradle'

mainClassName = 'class.path.package.BootApplication'

version = '0.0.3a'
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    // Standard spring boot packages
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.cloud:spring-cloud-starter-config')
    compile('org.springframework.boot:spring-boot-starter-jersey')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.boot:spring-boot-starter-validation')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')

    compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')

    compile('org.postgresql:postgresql')
    compile('biz.paluch.redis:lettuce:4.4.6.Final')
    compile('org.pacesys:openstack4j-core:3.1.0')
    compile('org.pacesys.openstack4j.connectors:openstack4j-httpclient:3.1.0')

    // Dozer object mapping
    compile('net.sf.dozer:dozer:5.5.1')
    // Sengrid library
    compile('com.sendgrid:sendgrid-java:4.2.1')
    compile('org.freemarker:freemarker:2.3.28')
    // Cloudant
    compile('com.cloudant:cloudant-client:2.9.0')
    compile('com.squareup.okhttp3:okhttp-urlconnection:3.4.2')
    compile('org.json:json:20171018')
    compile('javax.validation:validation-api:2.0.1.Final')
    //Swagger2
    compile('io.springfox:springfox-swagger2:2.9.2')
    compile('io.springfox:springfox-swagger-ui:2.9.2')

    runtime('org.springframework.boot:spring-boot-devtools')

    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('org.springframework.security:spring-security-test')
    testCompile("org.springframework.restdocs:spring-restdocs-mockmvc")
    testCompile("org.asciidoctor:asciidoctor-gradle-plugin:1.5.9.2")

    asciidoctor('org.springframework.restdocs:spring-restdocs-asciidoctor:2.0.2.RELEASE')

}

processResources {
//    expand(project.properties)
}

ext {
    springCloudVersion = 'Finchley.RELEASE'
    snippetsDir = file('build/generated-snippets')
//  springRestDocsVersion = '2.0.2.RELEASE'
}

ext['spring-restdocs.version'] = '${springRestDocsVersion}'

test { 
    outputs.dir snippetsDir
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        mavenBom("org.springframework.boot:spring-boot-dependencies:${springBootVersion}")
    }
}

asciidoctor {
//    attributes "snippets": snippetsDir
    inputs.dir snippetsDir
    dependsOn test
}

jar {
    dependsOn asciidoctor 
    from ('${asciidoctor.outputDir}/html5') { 
        into 'static/apidocs'
    }
}

my problem actually in this part:

jar {
    dependsOn asciidoctor 
    from ('${asciidoctor.outputDir}/html5') { 
        into 'static/apidocs'
    }
}

executed jar doesn't copy index.html file executed from asciidoctor into jar and jar executed only without this file

So how i can copy build/asciidoc/html5/index.html from build folder into executed jar?

Also if i need to use bootJar task so how i can make it include all jar needed into /BOOT-INF/lib/

Upvotes: 0

Views: 2098

Answers (1)

Andy Wilkinson
Andy Wilkinson

Reputation: 116051

Your configuration is almost right, but you are customising the wrong task. A Spring Boot fat jar is built with the bootJar task rather than the jar task. You need to replace jar with bootJar in your build.gradle. This will result in it looking the same as the following example:

bootJar {
    dependsOn asciidoctor 
    from ("${asciidoctor.outputDir}/html5") { 
        into 'static/docs'
    }
}

This is the configuration that's described in the REST Docs documentation.

Upvotes: 2

Related Questions