Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tag: v2.1.0.RC1
Fetching contributors…

Cannot retrieve contributors at this time

file 132 lines (108 sloc) 4.455 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
/*
* Copyright 2004-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import groovy.xml.MarkupBuilder
import grails.util.GrailsNameUtils
import grails.util.PluginBuildSettings

import org.apache.commons.io.FilenameUtils
import org.apache.ivy.core.report.ArtifactDownloadReport

import org.codehaus.groovy.grails.plugins.GrailsPluginUtils
import org.codehaus.groovy.grails.resolve.IvyDependencyManager

import grails.util.GrailsUtil
import org.codehaus.groovy.grails.plugins.publishing.PluginPackager

/**
* Gant script that deals with those tasks required for plugin developers
* (as opposed to plugin users).
*
* @author Graeme Rocher
*
* @since 0.4
*/

includeTargets << grailsScript("_GrailsPackage")

pluginIncludes = PluginPackager.INCLUDED_RESOURCES
pluginExcludes = PluginPackager.EXCLUDED_RESOURCES

target(packagePlugin: "Implementation target") {
    depends(checkVersion, parseArguments, packageApp)

    def pluginFile
    new File("${basedir}").eachFile {
        if (it.name.endsWith("GrailsPlugin.groovy")) {
            pluginFile = it
        }
    }

    if (!pluginFile) ant.fail("Plugin file not found for plugin project")

    def pluginBaseDir = pluginFile.parentFile.absolutePath
    def resourceList = pluginSettings.getArtefactResourcesForOne(pluginBaseDir)
    pluginInfo = pluginSettings.getPluginInfo(pluginBaseDir)
    def packager = new PluginPackager(grailsSettings, pluginInfo, resourceList, new File(projectWorkDir))
    packager.ant = ant
    packager.resourcesDir = new File(resourcesDirPath)
    packager.hasApplicationDependencies = grailsSettings.dependencyManager.hasApplicationDependencies()

    def descriptor = pluginSettings.getBasePluginDescriptor()
    plugin = packager.generatePluginXml(descriptor.file)

    if (plugin?.hasProperty('pluginExcludes')) {
        pluginInfo.pluginExcludes = plugin.pluginExcludes
    }

    if (argsMap.binary) {
        pluginInfo.packaging = "binary"
        plugin?.packaging = "binary"
    }
    else if (argsMap.source) {
        pluginInfo.packaging = "source"
        plugin?.packaging = "source"
    }
    else if (plugin?.hasProperty('packaging')) {
        pluginInfo.packaging = plugin.packaging
    }

    def pluginGrailsVersion = "${GrailsUtil.grailsVersion} > *"
    def lowerVersion = GrailsPluginUtils.getLowerVersion(pluginGrailsVersion)

    boolean supportsAtLeastVersion
    try {
        supportsAtLeastVersion = GrailsPluginUtils.supportsAtLeastVersion(lowerVersion, "1.2")
    }
    catch (e) {
        grailsConsole.error "Error: Plugin specified an invalid version range: ${pluginGrailsVersion}"
        exit 1
    }

    if (!supportsAtLeastVersion) {
        IvyDependencyManager dependencyManager = grailsSettings.dependencyManager
        def deps = dependencyManager.resolveExportedDependencies()
        if (dependencyManager.resolveErrors) {
            grailsConsole.error "Error: There was an error resolving plugin JAR dependencies"
            exit 1
        }

        if (deps) {
            packager.jarFiles = deps.collect { it.localFile }
        }
    }

    event("PackagePluginStart", [pluginInfo.name])

    // Package plugin's zip distribution
    try {
        pluginZip = packager.packagePlugin(pluginInfo.name, classesDir, grailsSettings.projectTargetDir)
    }
    catch ( e) {
        if(e.cause instanceof org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException) {
            grailsConsole.error "GSP Compilation Error (${e.cause.fileName}:${e.cause.lineNumber}) - $e.cause.message", e.cause
        }
        else {
            grailsConsole.error "Plugin Packaging Error: ${e.message}", e
        }
        exit 1
    }
    

    grailsConsole.addStatus "Plugin packaged ${new File(pluginZip).name}"

    event("PackagePluginEnd", [pluginInfo.name])
}

private loadBasePlugin() {
    pluginManager?.allPlugins?.find { it.basePlugin }
}
Something went wrong with that request. Please try again.