Skip to content

Commit 0cebdf8

Browse files
committed
Add an option to use Ant for native2ascii to solve #9464
1 parent 06ae1b3 commit 0cebdf8

File tree

3 files changed

+67
-27
lines changed

3 files changed

+67
-27
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
@@ -16,6 +16,11 @@ class GrailsExtension {
1616
*/
1717
boolean native2ascii = !Os.isFamily(Os.FAMILY_WINDOWS)
1818

19+
/**
20+
* Whether to use Ant to do the conversion
21+
*/
22+
boolean native2asciiAnt = false
23+
1924
/**
2025
* Whether assets should be packaged in META-INF/assets for plugins
2126
*/

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

Lines changed: 55 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.gradle.api.artifacts.Configuration
1616
import org.gradle.api.artifacts.Dependency
1717
import org.gradle.api.file.CopySpec
1818
import org.gradle.api.plugins.GroovyPlugin
19+
import org.gradle.api.tasks.AbstractCopyTask
1920
import org.gradle.api.tasks.JavaExec
2021
import org.gradle.api.tasks.SourceSet
2122
import org.gradle.api.tasks.TaskContainer
@@ -31,6 +32,7 @@ import org.grails.gradle.plugin.agent.AgentTasksEnhancer
3132
import org.grails.gradle.plugin.commands.ApplicationContextCommandTask
3233
import org.grails.gradle.plugin.model.GrailsClasspathToolingModelBuilder
3334
import org.grails.gradle.plugin.run.FindMainClassTask
35+
import org.grails.gradle.plugin.util.SourceSets
3436
import org.grails.io.support.FactoriesLoaderSupport
3537
import org.springframework.boot.gradle.SpringBootPluginExtension
3638

@@ -335,46 +337,73 @@ class GrailsGradlePlugin extends GroovyPlugin {
335337
**/
336338
protected void enableNative2Ascii(Project project, grailsVersion) {
337339
project.afterEvaluate {
338-
for (SourceSet sourceSet in project.sourceSets) {
340+
SourceSet sourceSet = SourceSets.findMainSourceSet(project)
339341

340-
project.tasks.getByName(sourceSet.processResourcesTaskName) { CopySpec task ->
341-
def grailsExt = project.extensions.getByType(GrailsExtension)
342-
// def destinationDir = ((ProcessResources) task).destinationDir
342+
def taskContainer = project.tasks
343343

344-
def replaceTokens = [
345-
'info.app.name': project.name,
346-
'info.app.version': project.version,
347-
'info.app.grailsVersion': grailsVersion
348-
]
344+
taskContainer.getByName(sourceSet.processResourcesTaskName) { AbstractCopyTask task ->
345+
346+
def grailsExt = project.extensions.getByType(GrailsExtension)
347+
def native2ascii = grailsExt.native2ascii
348+
if(native2ascii && grailsExt.native2asciiAnt && !taskContainer.findByName('native2ascii')) {
349+
def destinationDir = ((ProcessResources) task).destinationDir
350+
Task native2asciiTask = createNative2AsciiTask(taskContainer, project.file('grails-app/i18n'), destinationDir)
351+
task.dependsOn(native2asciiTask)
352+
}
349353

350-
task.from(project.relativePath("src/main/templates")) {
351-
into("META-INF/templates")
352-
}
353354

355+
def replaceTokens = [
356+
'info.app.name' : project.name,
357+
'info.app.version' : project.version,
358+
'info.app.grailsVersion': grailsVersion
359+
]
360+
361+
task.from(project.relativePath("src/main/templates")) {
362+
into("META-INF/templates")
363+
}
364+
365+
366+
if (!native2ascii) {
354367
task.from(sourceSet.resources) {
355368
include '**/*.properties'
356-
filter( ReplaceTokens, tokens: replaceTokens )
357-
if(grailsExt.native2ascii) {
358-
filter(EscapeUnicode)
359-
}
369+
filter(ReplaceTokens, tokens: replaceTokens)
360370
}
371+
}
372+
else if(!grailsExt.native2asciiAnt) {
361373
task.from(sourceSet.resources) {
362-
filter( ReplaceTokens, tokens: replaceTokens )
363-
include '**/*.groovy'
364-
include '**/*.yml'
365-
include '**/*.xml'
374+
include '**/*.properties'
375+
filter(ReplaceTokens, tokens: replaceTokens)
376+
filter(EscapeUnicode)
366377
}
378+
}
367379

368-
task.from(sourceSet.resources) {
369-
exclude '**/*.properties'
370-
exclude '**/*.groovy'
371-
exclude '**/*.yml'
372-
exclude '**/*.xml'
373-
}
380+
task.from(sourceSet.resources) {
381+
filter( ReplaceTokens, tokens: replaceTokens )
382+
include '**/*.groovy'
383+
include '**/*.yml'
384+
include '**/*.xml'
385+
}
386+
387+
task.from(sourceSet.resources) {
388+
exclude '**/*.properties'
389+
exclude '**/*.groovy'
390+
exclude '**/*.yml'
391+
exclude '**/*.xml'
374392
}
375393
}
376394
}
377395

378396
}
379397

398+
protected Task createNative2AsciiTask(TaskContainer taskContainer, src, dest) {
399+
def native2asciiTask = taskContainer.create('native2ascii')
400+
native2asciiTask << {
401+
ant.native2ascii(src: src, dest: dest,
402+
includes: "**/*.properties", encoding: "UTF-8")
403+
}
404+
native2asciiTask.inputs.dir(src)
405+
native2asciiTask.outputs.dir(dest)
406+
native2asciiTask
407+
}
408+
380409
}

grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/util/SourceSets.groovy

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import groovy.transform.CompileStatic
44
import org.gradle.api.Project
55
import org.gradle.api.plugins.JavaPluginConvention
66
import org.gradle.api.tasks.SourceSet
7+
import org.gradle.api.tasks.SourceSetContainer
78

89
/**
910
* @author Graeme Rocher
@@ -18,8 +19,13 @@ class SourceSets {
1819
* @return The main source set or null if it can't be found
1920
*/
2021
static SourceSet findMainSourceSet(Project project) {
22+
SourceSetContainer sourceSets = findSourceSets(project)
23+
return sourceSets?.find { SourceSet sourceSet -> sourceSet.name == SourceSet.MAIN_SOURCE_SET_NAME }
24+
}
25+
26+
static SourceSetContainer findSourceSets(Project project) {
2127
JavaPluginConvention plugin = project.getConvention().getPlugin(JavaPluginConvention)
2228
def sourceSets = plugin?.sourceSets
23-
return sourceSets?.find { SourceSet sourceSet -> sourceSet.name == SourceSet.MAIN_SOURCE_SET_NAME }
29+
sourceSets
2430
}
2531
}

0 commit comments

Comments
 (0)