Skip to content

Commit 0077f3a

Browse files
committed
Add support in grails-gradle-plugin for a pathingJar on windows if configuration is set
1 parent 710281f commit 0077f3a

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ class GrailsExtension {
3636
*/
3737
boolean exploded = false
3838

39+
/**
40+
* Whether to create a jar file to reference the classpath to prevent classpath too long issues in Windows
41+
*/
42+
boolean pathingJar = false
43+
3944
/**
4045
* Configure the reloading agent
4146
*/

grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ import org.gradle.api.Plugin
1313
import org.gradle.api.Project
1414
import org.gradle.api.Task
1515
import org.gradle.api.artifacts.Configuration
16+
import org.gradle.api.artifacts.ConfigurationContainer
1617
import org.gradle.api.artifacts.Dependency
1718
import org.gradle.api.file.CopySpec
19+
import org.gradle.api.java.archives.Manifest
1820
import org.gradle.api.plugins.GroovyPlugin
1921
import org.gradle.api.tasks.AbstractCopyTask
2022
import org.gradle.api.tasks.JavaExec
@@ -35,6 +37,8 @@ import org.grails.gradle.plugin.run.FindMainClassTask
3537
import org.grails.gradle.plugin.util.SourceSets
3638
import org.grails.io.support.FactoriesLoaderSupport
3739
import org.springframework.boot.gradle.SpringBootPluginExtension
40+
import org.apache.tools.ant.taskdefs.condition.Os
41+
3842

3943
import javax.inject.Inject
4044

@@ -83,6 +87,8 @@ class GrailsGradlePlugin extends GroovyPlugin {
8387
configureApplicationCommands(project)
8488

8589
createBuildPropertiesTask(project)
90+
91+
configurePathingJar(project)
8692
}
8793

8894
protected Task createBuildPropertiesTask(Project project) {
@@ -407,4 +413,63 @@ class GrailsGradlePlugin extends GroovyPlugin {
407413
native2asciiTask
408414
}
409415

416+
protected Jar createPathingJarTask(Project project, String name, Configuration...configurations) {
417+
File assets = new File(project.buildDir, 'assets')
418+
419+
project.tasks.create(name, Jar) { Jar task ->
420+
task.dependsOn(configurations)
421+
task.appendix = 'pathing'
422+
423+
Set files = []
424+
configurations.each {
425+
files.addAll(it.files)
426+
}
427+
428+
task.doFirst {
429+
manifest { Manifest manifest ->
430+
manifest.attributes "Class-Path": files.collect { File file ->
431+
file.toURI().toURL().toString().replaceFirst(/file:\/+/, '/')
432+
}.join(' ')
433+
}
434+
}
435+
436+
// assetCompile will be execute for all Jar-type tasks
437+
// (see https://github.com/bertramdev/asset-pipeline/blob/master/asset-pipeline-gradle/src/main/groovy/asset/pipeline/gradle/AssetPipelinePlugin.groovy#L85)
438+
// exclude the assets from pathing jar
439+
task.exclude {
440+
it.file.absolutePath.startsWith(assets.absolutePath)
441+
}
442+
}
443+
}
444+
445+
protected void configurePathingJar(Project project) {
446+
project.afterEvaluate {
447+
ConfigurationContainer configurations = project.configurations
448+
Configuration runtime = configurations.getByName('runtime')
449+
Configuration console = configurations.getByName('console')
450+
451+
Jar pathingJar = createPathingJarTask(project, "pathingJar", runtime)
452+
Jar pathingJarCommand = createPathingJarTask(project, "pathingJarCommand", runtime, console)
453+
454+
GrailsExtension grailsExt = project.extensions.getByType(GrailsExtension)
455+
456+
if (grailsExt.pathingJar && Os.isFamily(Os.FAMILY_WINDOWS)) {
457+
458+
TaskContainer tasks = project.tasks
459+
460+
tasks.withType(JavaExec) { JavaExec task ->
461+
task.dependsOn(pathingJar)
462+
task.doFirst {
463+
classpath = project.files("${project.buildDir}/classes/main", "${project.buildDir}/resources/main", "${project.projectDir}/gsp-classes", pathingJar.archivePath)
464+
}
465+
}
466+
467+
tasks.withType(ApplicationContextCommandTask) { ApplicationContextCommandTask task ->
468+
task.dependsOn(pathingJarCommand)
469+
task.systemProperties = ['grails.env': 'development']
470+
}
471+
}
472+
}
473+
}
474+
410475
}

0 commit comments

Comments
 (0)