Skip to content

Commit 927a655

Browse files
committed
Merge pull request #9728 from Schlogen/3.0.x
Add support in grails-gradle-plugin for a pathingJar
2 parents 710281f + 84f400a commit 927a655

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-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: 56 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,54 @@ class GrailsGradlePlugin extends GroovyPlugin {
407413
native2asciiTask
408414
}
409415

416+
protected Jar createPathingJarTask(Project project, String name, Configuration...configurations) {
417+
project.tasks.create(name, Jar) { Jar task ->
418+
task.dependsOn(configurations)
419+
task.appendix = 'pathing'
420+
421+
Set files = []
422+
configurations.each {
423+
files.addAll(it.files)
424+
}
425+
426+
task.doFirst {
427+
manifest { Manifest manifest ->
428+
manifest.attributes "Class-Path": files.collect { File file ->
429+
file.toURI().toURL().toString().replaceFirst(/file:\/+/, '/')
430+
}.join(' ')
431+
}
432+
}
433+
}
434+
}
435+
436+
protected void configurePathingJar(Project project) {
437+
project.afterEvaluate {
438+
ConfigurationContainer configurations = project.configurations
439+
Configuration runtime = configurations.getByName('runtime')
440+
Configuration console = configurations.getByName('console')
441+
442+
Jar pathingJar = createPathingJarTask(project, "pathingJar", runtime)
443+
Jar pathingJarCommand = createPathingJarTask(project, "pathingJarCommand", runtime, console)
444+
445+
GrailsExtension grailsExt = project.extensions.getByType(GrailsExtension)
446+
447+
if (grailsExt.pathingJar && Os.isFamily(Os.FAMILY_WINDOWS)) {
448+
449+
TaskContainer tasks = project.tasks
450+
451+
tasks.withType(JavaExec) { JavaExec task ->
452+
task.dependsOn(pathingJar)
453+
task.doFirst {
454+
classpath = project.files("${project.buildDir}/classes/main", "${project.buildDir}/resources/main", "${project.projectDir}/gsp-classes", pathingJar.archivePath)
455+
}
456+
}
457+
458+
tasks.withType(ApplicationContextCommandTask) { ApplicationContextCommandTask task ->
459+
task.dependsOn(pathingJarCommand)
460+
task.systemProperties = ['grails.env': 'development']
461+
}
462+
}
463+
}
464+
}
465+
410466
}

0 commit comments

Comments
 (0)