You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by tv...@apache.org on 2014/05/08 03:41:38 UTC

svn commit: r1593167 [1/2] - in /tomee/tomee/trunk/tomee/tomee-deb: ./ src/main/groovy/org/apache/tomee/deb/ src/main/groovy/org/apache/tomee/deb/jira/ src/main/resources/ src/main/resources/control/ src/main/resources/data/ src/main/resources/init/

Author: tveronezi
Date: Thu May  8 01:41:37 2014
New Revision: 1593167

URL: http://svn.apache.org/r1593167
Log:
-making the creating of the debian files a bit faster
-splitting the libraries into new packages (shared libs)
-adding precompiled changelogs

Added:
    tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/CompressTool.groovy
    tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/ControlBuilder.groovy
    tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/DataBuilder.groovy
    tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageInfo.groovy
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/data/
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/data/copyright.template
      - copied, changed from r1592772, tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/copyright.template
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/precompiled-changelog
Removed:
    tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/ControlData.groovy
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/copyright.template
Modified:
    tomee/tomee/trunk/tomee/tomee-deb/pom.xml
    tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy
    tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/ChangeLogBuilder.groovy
    tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/VersionIssues.groovy
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/lib_control.template
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postrm.sh
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh
    tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/setenv.sh

Modified: tomee/tomee/trunk/tomee/tomee-deb/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/pom.xml?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/pom.xml (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/pom.xml Thu May  8 01:41:37 2014
@@ -158,14 +158,6 @@
                         <configuration>
                             <artifactItems>
                                 <artifactItem>
-                                    <groupId>org.apache.tomcat</groupId>
-                                    <artifactId>tomcat</artifactId>
-                                    <version>${tomcat.version}</version>
-                                    <type>zip</type>
-                                    <outputDirectory>${distribution.workdir}</outputDirectory>
-                                    <destFileName>tomcat.zip</destFileName>
-                                </artifactItem>
-                                <artifactItem>
                                     <groupId>org.apache.openejb</groupId>
                                     <artifactId>apache-tomee</artifactId>
                                     <version>${project.version}</version>
@@ -250,34 +242,51 @@
                         <configuration>
                             <artifacts>
                                 <artifact>
-                                    <file>${project.build.directory}/deb/apache-tomee-plus-${project.version}.deb</file>
+                                    <file>${project.build.directory}/work-dir/apache-tomee-plus.deb</file>
                                     <type>deb</type>
                                     <classifier>plus</classifier>
                                 </artifact>
                                 <artifact>
-                                    <file>${project.build.directory}/deb/apache-tomee-jaxrs-${project.version}.deb
+                                    <file>${project.build.directory}/work-dir/apache-tomee-jaxrs.deb
                                     </file>
                                     <type>deb</type>
                                     <classifier>jaxrs</classifier>
                                 </artifact>
                                 <artifact>
-                                    <file>${project.build.directory}/deb/apache-tomee-webprofile-${project.version}.deb
+                                    <file>${project.build.directory}/work-dir/apache-tomee-webprofile.deb
                                     </file>
                                     <type>deb</type>
                                     <classifier>webprofile</classifier>
                                 </artifact>
                                 <artifact>
-                                    <file>${project.build.directory}/deb/apache-tomee-plume-${project.version}.deb
+                                    <file>${project.build.directory}/work-dir/apache-tomee-plume.deb
                                     </file>
                                     <type>deb</type>
                                     <classifier>plume</classifier>
                                 </artifact>
                                 <artifact>
-                                    <file>
-                                        ${project.build.directory}/deb/apache-tomee-lib-tomcat-${project.version}.deb
+                                    <file>${project.build.directory}/work-dir/apache-libtomee-jaxrs-java.deb
+                                    </file>
+                                    <type>deb</type>
+                                    <classifier>lib-jaxrs</classifier>
+                                </artifact>
+                                <artifact>
+                                    <file>${project.build.directory}/work-dir/apache-libtomee-plume-java.deb
+                                    </file>
+                                    <type>deb</type>
+                                    <classifier>lib-plume</classifier>
+                                </artifact>
+                                <artifact>
+                                    <file>${project.build.directory}/work-dir/apache-libtomee-plus-java.deb
+                                    </file>
+                                    <type>deb</type>
+                                    <classifier>lib-plus</classifier>
+                                </artifact>
+                                <artifact>
+                                    <file>${project.build.directory}/work-dir/apache-libtomee-webprofile-java.deb
                                     </file>
                                     <type>deb</type>
-                                    <classifier>lib-tomcat</classifier>
+                                    <classifier>lib-webprofile</classifier>
                                 </artifact>
                             </artifacts>
                         </configuration>

Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/CompressTool.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/CompressTool.groovy?rev=1593167&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/CompressTool.groovy (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/CompressTool.groovy Thu May  8 01:41:37 2014
@@ -0,0 +1,94 @@
+package org.apache.tomee.deb
+
+import groovy.io.FileType
+import org.apache.commons.compress.archivers.ar.ArArchiveEntry
+import org.apache.commons.compress.archivers.ar.ArArchiveOutputStream
+import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream
+import org.apache.commons.compress.compressors.gzip.GzipParameters
+import org.apache.maven.project.MavenProject
+
+import java.util.zip.Deflater
+
+class CompressTool {
+    private def ant = new AntBuilder()
+    private File workDir
+
+    CompressTool(MavenProject project) {
+        this.workDir = new File(project.properties['distribution.workdir'] as String)
+    }
+
+    void gz(String filePath, String gzipFilePath) {
+        new File(filePath).withInputStream { fis ->
+            new File(gzipFilePath).withOutputStream { fos ->
+                def gzParams = new GzipParameters(
+                        compressionLevel: Deflater.BEST_COMPRESSION
+                )
+                def gzo = new GzipCompressorOutputStream(fos, gzParams)
+                gzo << fis
+                gzo.close()
+            }
+        }
+    }
+
+    private void arDebianBinary(ArArchiveOutputStream output) {
+        byte[] text = "2.0\n".getBytes()
+        def entry = new ArArchiveEntry('debian-binary', text.length)
+        output.putArchiveEntry(entry)
+        output.write(text)
+        output.closeArchiveEntry()
+    }
+
+    private File createTarGz(String classifier, File dataDir) {
+        def tarFile = new File(dataDir.parent, "${dataDir.name}.tar")
+        def gzFile = new File(dataDir.parent, "${tarFile.name}.gz")
+        ant.with {
+            tar(destfile: tarFile) {
+                tarfileset(dir: dataDir, username: 'root', group: 'root', prefix: './') {
+                    include(name: "**/*")
+                    exclude(name: "**/*.sh")
+                    exclude(name: "**/postinst")
+                    exclude(name: "**/prerm")
+                    exclude(name: "**/postrm")
+                    exclude(name: "**/init.d/${classifier}")
+                }
+                tarfileset(dir: dataDir, username: 'root', group: 'root', filemode: '755', prefix: './') {
+                    include(name: "**/*.sh")
+                    include(name: "**/postinst")
+                    include(name: "**/prerm")
+                    include(name: "**/postrm")
+                    include(name: "**/init.d/${classifier}")
+                }
+            }
+            gzip(src: tarFile, destfile: gzFile)
+        }
+        tarFile.delete()
+        gzFile
+    }
+
+    private void arItem(ArArchiveOutputStream output, File file) {
+        def entry = new ArArchiveEntry(file.name, file.length())
+        output.putArchiveEntry(entry)
+        output << new FileInputStream(file)
+        output.closeArchiveEntry()
+    }
+
+    private void compressFiles(String classifier) {
+        def exploded = new File(workDir, "exploded-${classifier}")
+        def dataDir = new File(exploded, 'data')
+        def controlDir = new File(exploded, 'control')
+        def ar = new File(exploded, 'distribution.deb')
+        def output = new ArArchiveOutputStream(new FileOutputStream(ar))
+        arDebianBinary(output)
+        arItem(output, createTarGz(classifier, controlDir))
+        arItem(output, createTarGz(classifier, dataDir))
+        output.close()
+        ar.renameTo(new File(workDir, "apache-${classifier}.deb"))
+    }
+
+    void createDebs() {
+        workDir.eachFile(FileType.DIRECTORIES, { File dir ->
+            String classifier = dir.name.substring("exploded-".size())
+            compressFiles(classifier)
+        })
+    }
+}

Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/ControlBuilder.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/ControlBuilder.groovy?rev=1593167&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/ControlBuilder.groovy (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/ControlBuilder.groovy Thu May  8 01:41:37 2014
@@ -0,0 +1,106 @@
+package org.apache.tomee.deb
+
+import groovy.text.GStringTemplateEngine
+import org.apache.commons.codec.digest.DigestUtils
+import org.apache.maven.project.MavenProject
+
+import java.text.SimpleDateFormat
+
+class ControlBuilder {
+
+    private String classifier
+    private File workDir
+    private File controlDir
+
+    String version
+    Double installedSize
+    int priority
+
+    def tplEngine = new GStringTemplateEngine()
+
+    private static Date now = new Date()
+
+    ControlBuilder(MavenProject project, String classifier) {
+        this.classifier = classifier
+        this.workDir = new File(project.properties['distribution.workdir'] as String)
+
+        def dft = new SimpleDateFormat('yyyy-MM-dd-HH-mm-ss')
+        dft.timeZone = TimeZone.getTimeZone('GMT-0')
+        def executionDate = dft.format(now)
+        this.version = project.version
+        if (this.version.toLowerCase().endsWith('-snapshot')) {
+            this.version += "-${executionDate}"
+        }
+    }
+
+    private static String getCheckSum(File file) {
+        return getCheckSum(new FileInputStream(file))
+    }
+
+    private static String getCheckSum(InputStream input) {
+        String md5 = DigestUtils.md5Hex(input)
+        input.close()
+        return md5
+    }
+
+    private static String getCheckSumLine(File root, File file) {
+        String md5 = getCheckSum(file)
+        return "${md5} ${file.absolutePath.substring(root.absolutePath.length() + 1)}"
+    }
+
+    ControlBuilder buildControlDir() {
+        def exploded = new File(workDir, "exploded-${classifier}")
+        controlDir = new File(exploded, 'control')
+        controlDir.mkdirs()
+        File dataDir = new File(exploded, 'data')
+        new File(controlDir, 'md5sums').withWriter { BufferedWriter out ->
+            dataDir.eachFileRecurse {
+                if (it.directory) {
+                    return
+                }
+                out.writeLine(getCheckSumLine(dataDir, it))
+            }
+        }
+        this.installedSize = dataDir.directorySize() / 1024
+        switch (classifier) {
+            case 'plus':
+                this.priority = 4
+                break
+            case 'plume':
+                this.priority = 3
+                break
+            case 'jaxrs':
+                this.priority = 2
+                break
+            default:
+                this.priority = 1
+        }
+        this
+    }
+
+    ControlBuilder withWriter(String targetFilePath, def closure) {
+        def toFile = new File(controlDir, targetFilePath)
+        toFile.parentFile.mkdirs()
+        toFile.withWriter closure as Closure
+        this
+    }
+
+    ControlBuilder withBaseDir(def closure) {
+        closure new File(workDir, "exploded-${classifier}")
+        this
+    }
+
+    ControlBuilder writeTemplate(String toPath, String templatePath, Map<String, String> params) {
+        def templateResource = this.class.getResource(templatePath).text
+        withWriter(toPath, { BufferedWriter out ->
+            def template = tplEngine.createTemplate(templateResource).make(params)
+            out.write(template.toString())
+        })
+        this
+    }
+
+    ControlBuilder withMe(def closure) {
+        closure(this)
+        this
+    }
+}

Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/DataBuilder.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/DataBuilder.groovy?rev=1593167&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/DataBuilder.groovy (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/DataBuilder.groovy Thu May  8 01:41:37 2014
@@ -0,0 +1,183 @@
+package org.apache.tomee.deb
+
+import groovy.io.FileType
+import groovy.text.GStringTemplateEngine
+import org.apache.maven.project.MavenProject
+import org.apache.tomee.deb.jira.ChangeLogBuilder
+
+import java.util.jar.JarEntry
+import java.util.jar.JarFile
+
+class DataBuilder {
+
+    def ant = new AntBuilder()
+    def tplEngine = new GStringTemplateEngine()
+    private String classifier
+    private File workDir
+    private File outputDir
+    private File dataDir
+    private String zipFile
+    Map<String, String> symbolicLinks = [:]
+    private CompressTool compressTool
+    private File baseDir
+
+    DataBuilder(MavenProject project, String classifier, String zipFile, CompressTool compressTool) {
+        this.baseDir = project.basedir
+        this.classifier = classifier
+        this.workDir = new File(project.properties['distribution.workdir'] as String)
+        this.zipFile = zipFile
+        this.compressTool = compressTool
+    }
+
+    DataBuilder buildDataDir() {
+        outputDir = unzipOriginalPackage()
+        this
+    }
+
+    DataBuilder writeTemplate(String toPath, String templatePath, Map<String, String> params) {
+        def templateResource = this.class.getResource(templatePath).text
+        def toFile = new File(dataDir, toPath)
+        toFile.parentFile.mkdirs()
+        toFile.withWriter { BufferedWriter out ->
+            def template = tplEngine.createTemplate(templateResource).make(params)
+            out.write(template.toString())
+        }
+        this
+    }
+
+    DataBuilder copyContent(String toPath, String sourcePath) {
+        def dest = new File(dataDir, toPath)
+        dest.parentFile.mkdirs()
+        dest.withWriter { BufferedWriter out ->
+            def data = this.class.getResource(sourcePath).withInputStream { InputStream dataInput ->
+                out << dataInput
+            }
+        }
+        this
+    }
+
+    DataBuilder eachFileRecurse(String path, def closure) {
+        File root = new File(dataDir, path)
+        int pathStartIndex = dataDir.absolutePath.size()
+        root.eachFileRecurse {
+            closure(this, it.absolutePath.substring(pathStartIndex).replace('\\', '/'), it)
+        }
+        this
+    }
+
+    DataBuilder move(String fromPath, String toPath) {
+        File from = new File(outputDir, fromPath)
+        File to = new File(dataDir, toPath)
+        to.parentFile.mkdirs()
+        from.renameTo(to)
+        this
+    }
+
+    private File unzipOriginalPackage() {
+        def exploded = new File(workDir, "exploded-${classifier}")
+        def zipFile = new File(workDir, this.zipFile)
+        outputDir = new File(exploded, 'output')
+        dataDir = new File(exploded, 'data')
+        ant.unzip(
+                src: zipFile,
+                dest: exploded
+        )
+        exploded.listFiles()[0].renameTo(outputDir)
+        outputDir.eachFileRecurse(FileType.FILES) { File file ->
+            def fileName = file.name.toLowerCase()
+            if (fileName.endsWith('.txt')
+                    || fileName.endsWith('.exe')
+                    || fileName.endsWith('.bat')
+                    || fileName.endsWith('.original')
+                    || fileName.endsWith('.tmp')
+                    || fileName == 'license') {
+                file.delete()
+            }
+        }
+        outputDir
+    }
+
+    DataBuilder addSymbolicLink(String path, String reference) {
+        symbolicLinks.put(path, reference)
+    }
+
+    private boolean hasClasses(File jarFile) {
+        def entriesEnumerator = new JarFile(jarFile).entries()
+        while (entriesEnumerator.hasMoreElements()) {
+            def jarEntry = entriesEnumerator.nextElement() as JarEntry
+            if (jarEntry.name.endsWith('.class')) {
+                return true
+            }
+        }
+        false
+    }
+
+    private void maskCodelessJars() {
+        def unjarDir = new File(workDir, 'unjar')
+        unjarDir.mkdirs()
+        dataDir.eachFileRecurse(FileType.FILES) { File jarFile ->
+            if (jarFile.name.endsWith('.jar')) {
+                if (!hasClasses(jarFile)) {
+                    def explodedJar = new File(unjarDir, "${classifier}/${jarFile.name}")
+                    ant.unjar(src: jarFile, dest: explodedJar)
+                    jarFile.delete()
+                    ant.zip(destfile: jarFile.absolutePath) {
+                        fileset(dir: explodedJar.absolutePath) {
+                            exclude(name: '**/META-INF/MANIFEST.MF')
+                        }
+                    }
+                }
+            }
+        }
+        unjarDir.deleteDir()
+    }
+
+    static def buildChangelogContent = { File baseDir ->
+        def preCompiledChangelog = new File(baseDir, 'src/main/resources/precompiled-changelog')
+        if(preCompiledChangelog.exists()) {
+            return preCompiledChangelog.text
+        }
+        def builder = new ChangeLogBuilder()
+        def content = builder.buildChangelogContent('TOMEE,OPENEJB')
+        preCompiledChangelog.withWriter {BufferedWriter out ->
+            out.write(content)
+        }
+        content
+    }.memoize() // execute it just once
+
+    DataBuilder buildChangelog() {
+        String content = buildChangelogContent(baseDir)
+        if (!content) {
+            return this
+        }
+        def docDir = new File(dataDir, "usr/share/doc/${classifier}/")
+        docDir.mkdirs()
+        def changelogFile = new File(docDir, 'changelog.Debian')
+        changelogFile.withWriter { BufferedWriter writer ->
+            writer.writeLine(content)
+        }
+        def changelogFileGz = new File(changelogFile.parent, 'changelog.Debian.gz')
+        compressTool.gz(changelogFile.absolutePath, changelogFileGz.absolutePath)
+        changelogFile.delete()
+        this
+    }
+
+    private void deleteEmptyDirs(File rootDir) {
+        List<File> deleteMe = []
+        rootDir.eachFileRecurse(FileType.DIRECTORIES) { File dir ->
+            if (!dir.list()) {
+                deleteMe << dir
+            }
+        }
+        deleteMe.each {
+            it.delete()
+        }
+    }
+
+    DataBuilder clean() {
+        outputDir.deleteDir()
+        deleteEmptyDirs(dataDir)
+        maskCodelessJars()
+        this
+    }
+}

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy Thu May  8 01:41:37 2014
@@ -18,442 +18,181 @@
 
 package org.apache.tomee.deb
 
-import groovy.io.FileType
-import groovy.text.GStringTemplateEngine
-import org.apache.commons.codec.digest.DigestUtils
-import org.apache.commons.compress.archivers.ar.ArArchiveEntry
-import org.apache.commons.compress.archivers.ar.ArArchiveOutputStream
-import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream
-import org.apache.commons.compress.compressors.gzip.GzipParameters
 import org.apache.maven.project.MavenProject
-import org.apache.tomee.deb.jira.ChangeLogBuilder
-
-import java.text.SimpleDateFormat
-import java.util.jar.JarEntry
-import java.util.jar.JarFile
-import java.util.zip.Deflater
 
 class PackageBuilder {
 
-    static final TOMCAT_EXPLODED_DIR = 'tomcat-exploded'
-    static final TOMCAT_PACKAGE_NAME = 'lib-tomcat'
-
-    def ant = new AntBuilder()
-    MavenProject project
-
-    private String executionDate = ''
+    private MavenProject project
+    private CompressTool compressTool
+    private File workDir
+    private Map<String, PackageInfo> packageInfoMap = [:]
 
     PackageBuilder(MavenProject myProject) {
-        def dft = new SimpleDateFormat('yyyy-MM-dd-HH-mm-ss')
-        dft.timeZone = TimeZone.getTimeZone('GMT-0')
-        executionDate = dft.format(new Date())
         project = myProject
+        compressTool = new CompressTool(myProject)
+        workDir = new File(myProject.properties['distribution.workdir'] as String)
     }
 
-    def buildChangelogContent = {
-        def builder = new ChangeLogBuilder()
-        builder.buildChangelogContent('TOMEE')
-    }.memoize() // execute it just once per instance
-
-    private void gz(String file, String gzipFile) {
-        new File(file).withInputStream { fis ->
-            new File(gzipFile).withOutputStream { fos ->
-                def gzParams = new GzipParameters(
-                        compressionLevel: Deflater.BEST_COMPRESSION
-                )
-                def gzo = new GzipCompressorOutputStream(fos, gzParams)
-                gzo << fis
-                gzo.close()
-            }
-        }
-    }
-
-    void buildChangelog(File docDir) {
-        String content = buildChangelogContent()
-        if (!content) {
-            return
-        }
-        def changelogFile = new File(docDir, 'changelog.Debian')
-        changelogFile.withWriter { BufferedWriter writer ->
-            writer.writeLine(content)
-        }
-        def changelogFileGz = new File(changelogFile.parent, 'changelog.Debian.gz')
-        gz(changelogFile.absolutePath, changelogFileGz.absolutePath)
-        changelogFile.delete()
-    }
-
-    String unzip(String classifier, String tarPath) {
-        def outputDir = new File(new File(tarPath).parent, "exploded-${classifier}")
-        ant.delete(includeemptydirs: true, dir: outputDir.absolutePath) // remove old files
-        outputDir.mkdirs()
-        ant.unzip(
-                src: tarPath,
-                dest: outputDir.absolutePath
-        )
-        def files = outputDir.listFiles()
-        if (files.size() == 1) {
-            outputDir = files[0]
-        }
-        ant.delete(includeemptydirs: true) {
-            fileset(dir: outputDir.absolutePath, includes: '**/*.txt')
-            fileset(dir: outputDir.absolutePath, includes: '**/*.exe')
-            fileset(dir: outputDir.absolutePath, includes: '**/*.bat')
-            fileset(dir: outputDir.absolutePath, includes: '**/*.original')
-            fileset(dir: outputDir.absolutePath, includes: '**/*.tmp')
-            fileset(dir: outputDir.absolutePath, includes: '**/LICENSE') // lintian does not like it.
-        }
-        // Moving the default tomee webapp to /usr/share/tomee-${classifier}
-        new File(outputDir, 'webapps/tomee').renameTo(new File(outputDir, 'tomee-webapp'))
-        // Removing all extra webapps, including the webapps directory
-        ant.delete(includeemptydirs: true, dir: new File(outputDir, 'webapps').absolutePath)
-        outputDir.absolutePath
-    }
-
-    private static String getCheckSum(File file) {
-        return getCheckSum(new FileInputStream(file))
-    }
-
-    private static String getCheckSum(InputStream input) {
-        String md5 = DigestUtils.md5Hex(input)
-        input.close()
-        return md5
-    }
-
-    private static String getCheckSumLine(File root, File file) {
-        String md5 = getCheckSum(file)
-        return "${md5} ${file.absolutePath.substring(root.absolutePath.length() + 1)}"
-    }
-
-    private void writeTemplate(File file, String templatePath, Map variables) {
-        try {
-            file.withWriter { BufferedWriter out ->
-                def template = new GStringTemplateEngine().createTemplate(
-                        this.class.getResource(templatePath)
-                ).make(variables)
-                out.write(template.toString())
-            }
-        } catch (e) {
-            throw new RuntimeException("Error building $templatePath", e)
-        }
-    }
-
-    private ControlData prepareControlData(String dataDirPath) {
-        def dataDir = new File(dataDirPath)
-        def controlDir = new File(dataDir.parent, 'control')
-        controlDir.mkdirs()
-        new File(controlDir, 'md5sums').withWriter { BufferedWriter out ->
-            dataDir.eachFileRecurse {
-                if (it.directory) {
-                    return
+    private void createLibStructure(List<String> dependencyOrder) {
+        Set<String> previousJars = []
+        Set<File> duplicatedJars = []
+        dependencyOrder.each { classifier ->
+            def recurse = { DataBuilder builder, String path, File file ->
+                if (previousJars.contains(file.name)) {
+                    duplicatedJars << file
+                } else {
+                    previousJars << file.name
+                    file.renameTo(new File(file.parentFile, "libtomee-${classifier}-${file.name}"))
                 }
-                out.writeLine(getCheckSumLine(dataDir, it))
-            }
-        }
-        Double installedSize = dataDir.directorySize() / 1024
-        String version = project.version
-        if (version.toLowerCase().endsWith('-snapshot')) {
-            version += "-${executionDate}"
-        }
-        new ControlData(
-                installedSize: installedSize,
-                version: version,
-                dataDir: dataDir,
-                controlDir: controlDir
-        )
-    }
-
-    private String createControlDir(String classifier, String dataDirPath) {
-        def controlData = prepareControlData(dataDirPath)
-        writeTemplate(new File(controlData.controlDir, 'control'), '/control/control.template', [
-                classifier  : classifier,
-                tomeeVersion: controlData.version,
-                inMB        : controlData.installedSize.longValue()
-        ])
-        def priority
-        switch (classifier) {
-            case 'plus':
-                priority = 4
-                break
-            case 'plume':
-                priority = 3
-                break
-            case 'jaxrs':
-                priority = 2
-                break
-            default:
-                priority = 1
-        }
-        writeTemplate(new File(controlData.controlDir, 'postinst'), '/control/postinst.sh', [
-                tomeeVersion: project.version,
-                classifier  : classifier,
-                priority    : priority
-        ])
-        writeTemplate(new File(controlData.controlDir, 'prerm'), '/control/prerm.sh', [
-                tomeeVersion: project.version, classifier: classifier
-        ])
-        writeTemplate(new File(controlData.controlDir, 'postrm'), '/control/postrm.sh', [
-                tomeeVersion: project.version, classifier: classifier
-        ])
-        new File(controlData.controlDir, 'conffiles').withWriter { BufferedWriter out ->
-            new File(controlData.dataDir, "etc/tomee-${classifier}").eachFile {
-                if (it.isFile()) {
-                    out.writeLine("/etc/tomee-${classifier}/${it.name}")
-                }
-            }
-            new File(controlData.dataDir, "etc/tomee-${classifier}/conf.d").eachFile {
-                out.writeLine("/etc/tomee-${classifier}/conf.d/${it.name}")
-            }
-            out.writeLine("/etc/init.d/tomee-${classifier}")
-        }
-        controlData.controlDir.absolutePath
-    }
-
-    String createDataDir(String classifier, String explodedPath) {
-        def exploded = new File(explodedPath)
-        def outputDir = new File(exploded.parent, "output-${classifier}")
-        def dataDir = new File(outputDir, 'data')
-        dataDir.mkdirs()
-        def distributionTomeeDir = new File(dataDir, "usr/share/tomee-${classifier}")
-        ant.move(todir: distributionTomeeDir.absolutePath) {
-            fileset(dir: explodedPath) {
-                include(name: "**/*")
-            }
-        }
-        new File(distributionTomeeDir, 'LICENSE').delete() // Unnecessary (lintian complains about this guy.)
-        def homeConf = new File(dataDir, "etc/tomee-${classifier}")
-        ant.move(todir: homeConf.absolutePath) {
-            fileset(dir: new File(distributionTomeeDir, 'conf')) {
-                include(name: "**/*")
-            }
-        }
-        new File(homeConf, 'openejb.conf').withWriter { BufferedWriter out ->
-            def data = this.class.getResource('/default.openejb.conf').text
-            out.write(data)
-        }
-        new File(homeConf, 'tomee.xml').withWriter { BufferedWriter out ->
-            def data = this.class.getResource('/tomee_xml.template').text
-            out.write(data)
-        }
-        def homeConfD = new File(homeConf, 'conf.d')
-        homeConfD.mkdirs()
-        // Saving default configuration files
-        new File(homeConfD, 'cxf.properties').withWriter { BufferedWriter out ->
-            def data = this.class.getResource('/META-INF/org.apache.openejb.server.ServerService/cxf').text
-            out.write(data)
-        }
-        new File(homeConfD, 'cxf-rs.properties').withWriter { BufferedWriter out ->
-            def data = this.class.getResource('/META-INF/org.apache.openejb.server.ServerService/cxf-rs').text
-            out.write(data)
-        }
-        new File(homeConfD, 'hsql.properties').withWriter { BufferedWriter out ->
-            def data = this.class.getResource('/META-INF/org.apache.openejb.server.ServerService/hsql').text
-            out.write(data)
-        }
-        def initd = new File(dataDir, 'etc/init.d/')
-        initd.mkdirs()
-        writeTemplate(new File(initd, "tomee-${classifier}"), '/init/tomee.sh', [
-                classifier  : classifier,
-                tomeeVersion: project.version
-        ])
-        def docDir = new File(dataDir, "usr/share/doc/tomee-${classifier}/")
-        ant.move(todir: docDir.absolutePath) {
-            fileset(file: new File(distributionTomeeDir, 'NOTICE').absolutePath)
-            fileset(file: new File(distributionTomeeDir, 'RELEASE-NOTES').absolutePath)
-            fileset(file: new File(distributionTomeeDir, 'RUNNING.txt').absolutePath)
-        }
-        buildChangelog(docDir)
-        new File(dataDir, "var/log/tomee-${classifier}").mkdirs()
-        new File(dataDir, "var/lib/tomee-${classifier}/conf").mkdirs()
-        new File(dataDir, "var/lib/tomee-${classifier}/work").mkdirs()
-        new File(dataDir, "var/lib/tomee-${classifier}/apps").mkdirs()
-        new File(distributionTomeeDir, 'conf').delete() // add link from "/usr/lib/tomee/conf" to "/etc/tomee"
-        new File(distributionTomeeDir, 'logs').delete() // add link from "/usr/lib/tomee/logs" to "/var/log/tomee"
-        new File(distributionTomeeDir, 'temp').delete() // add link from "/usr/lib/tomee/temp" to "/var/lib/tomee/temp"
-        new File(distributionTomeeDir, 'work').delete() // add link from "/usr/lib/tomee/work" to "/var/lib/tomee/work"
-        writeTemplate(
-                new File(dataDir, "usr/share/doc/tomee-${classifier}/copyright"),
-                '/copyright.template',
-                [formattedDate: new Date().toString()]
-        )
-        def baseBinDir = new File(dataDir, "var/lib/tomee-${classifier}/bin")
-        baseBinDir.mkdirs()
-        writeTemplate(new File(baseBinDir, 'setenv.sh'), '/init/setenv.sh', [
-                classifier  : classifier,
-                tomeeVersion: project.version
-        ])
-        writeTemplate(new File(distributionTomeeDir, 'bin/tomee-instance.sh'), '/init/tomee-instance.sh', [
-                classifier  : classifier,
-                tomeeVersion: project.version
-        ])
-        exploded.delete()
-        // Removing tomcat jars. It will come from an extra tomcat debian package.
-        def tomcatLibs = new File(project.properties['distribution.workdir'] as String,
-                "$TOMCAT_EXPLODED_DIR/apache-tomcat-${project.properties['tomcat.version']}/lib")
-        ant.echo(message: "Removing Tomcat lib files from our TomEE distribution. Tomcat path: ${tomcatLibs.absolutePath}")
-        tomcatLibs.eachFile { jar ->
-            def existing = new File(dataDir, "usr/share/tomee-${classifier}/lib/${jar.name}")
-            if (existing.exists()) {
-                existing.delete()
             }
-        }
-        dataDir.absolutePath
-    }
-
-    private boolean hasClasses(File jarFile) {
-        def entriesEnumerator = new JarFile(jarFile).entries()
-        while (entriesEnumerator.hasMoreElements()) {
-            def jarEntry = entriesEnumerator.nextElement() as JarEntry
-            if (jarEntry.name.endsWith('.class')) {
-                return true
-            }
-        }
-        false
-    }
-
-    void maskCodelessJars(String classifier, String dataDir) {
-        def unjarDir = new File(project.properties['distribution.workdir'] as String, 'unjar')
-        unjarDir.mkdirs()
-        new File(dataDir).eachFileRecurse(FileType.FILES) { File jarFile ->
-            if (jarFile.name.endsWith('.jar')) {
-                if (!hasClasses(jarFile)) {
-                    ant.echo(message: "Masking codeless jar: ${jarFile.absolutePath}")
-                    def explodedJar = new File(
-                            project.properties['distribution.workdir'] as String,
-                            "unjar/${classifier}/${jarFile.name}"
-                    )
-                    ant.unjar(src: jarFile, dest: explodedJar)
-                    jarFile.delete()
-                    ant.zip(destfile: jarFile.absolutePath) {
-                        fileset(dir: explodedJar.absolutePath) {
-                            exclude(name: '**/META-INF/MANIFEST.MF')
+            def builder = new DataBuilder(project, "libtomee-${classifier}-java", "tomee-${classifier}.zip", compressTool)
+                    .buildDataDir()
+                    .move('lib', 'usr/share/java')
+                    .eachFileRecurse('usr/share/java', recurse)
+                    .writeTemplate("usr/share/doc/libtomee-${classifier}-java/copyright", '/data/copyright.template', [:])
+                    .move('NOTICE', "usr/share/doc/libtomee-${classifier}-java/NOTICE")
+                    .move('RELEASE-NOTES', "usr/share/doc/libtomee-${classifier}-java/RELEASE-NOTES")
+                    .buildChangelog()
+                    .clean()
+            packageInfoMap.put("libtomee-${classifier}-java", new PackageInfo(
+                    classifier: "libtomee-${classifier}-java",
+                    dataBuilder: builder
+            ))
+        }
+        duplicatedJars.each { it.delete() }
+        def writeTpl = { ControlBuilder me, String toPath, String tplPath, String classifier ->
+            def params = [
+                    classifier  : classifier,
+                    tomeeVersion: me.version,
+                    inMB        : me.installedSize.longValue().toString()
+            ] as Map<String, String>
+            me.writeTemplate(toPath, tplPath, params)
+        }
+        def myDepency = null
+        dependencyOrder.each { String classifier ->
+            String libClassifier = "libtomee-${classifier}-java"
+            def builder = new ControlBuilder(project, "libtomee-${classifier}-java").buildControlDir()
+                    .withMe({
+                writeTpl(it as ControlBuilder, 'control', '/control/lib_control.template', libClassifier)
+            })
+            if (myDepency) {
+                builder.withBaseDir({ File baseDir ->
+                    def control = new File(baseDir, 'control/control')
+                    control.append("Depends: libtomee-${myDepency}-java (= ${builder.version})\n")
+                })
+            }
+            myDepency = classifier
+            packageInfoMap.get("libtomee-${classifier}-java").controlBuilder = builder
+        }
+    }
+
+    private Set<String> getLibJarNames(String classifier) {
+        def workDir = new File(project.properties['distribution.workdir'] as String)
+        def libDir = new File(workDir, "exploded-libtomee-${classifier}-java/data/usr/share/java")
+        int startIndex = "libtomee-${classifier}-".size()
+        libDir.list().collect { it.substring(startIndex) }
+    }
+
+    private void createDataStructure(String classifier) {
+        def jarsWebprofile = getLibJarNames('webprofile')
+        def jarsJaxrs = getLibJarNames('jaxrs')
+        def jarsPlus = getLibJarNames('plus')
+        def jarsPlume = getLibJarNames('plume')
+        def recurse = { DataBuilder builder, String path, File file ->
+            def addSymLink = { jarClassifier ->
+                builder.addSymbolicLink(path, "/usr/share/java/libtomee-${jarClassifier}-${file.name}")
+                file.delete()
+            }
+            if (jarsWebprofile.contains(file.name)) {
+                addSymLink('webprofile')
+            } else if (jarsJaxrs.contains(file.name)) {
+                addSymLink('jaxrs')
+            } else if (jarsPlus.contains(file.name)) {
+                addSymLink('plus')
+            } else if (jarsPlume.contains(file.name)) {
+                addSymLink('plume')
+            }
+        }
+        def tplParams = [classifier: classifier, tomeeVersion: project.version]
+        def builder = new DataBuilder(project, "tomee-${classifier}", "tomee-${classifier}.zip", compressTool)
+                .buildDataDir()
+                .move('lib', "usr/share/tomee-${classifier}/lib")
+                .eachFileRecurse("usr/share/tomee-${classifier}/lib", recurse)
+                .move('webapps/tomee', "usr/share/tomee-${classifier}/extras/tomee")
+                .move('endorsed', "usr/share/tomee-${classifier}/endorsed")
+                .move('bin', "usr/share/tomee-${classifier}/bin")
+                .move('conf', "etc/tomee-${classifier}")
+                .writeTemplate("usr/share/doc/tomee-${classifier}/copyright", '/data/copyright.template', [:])
+                .move('NOTICE', "usr/share/doc/tomee-${classifier}/NOTICE")
+                .move('RELEASE-NOTES', "usr/share/doc/tomee-${classifier}/RELEASE-NOTES")
+                .copyContent("etc/tomee-${classifier}/conf.d/cxf.properties", '/META-INF/org.apache.openejb.server.ServerService/cxf')
+                .copyContent("etc/tomee-${classifier}/conf.d/cxf-rs.properties", '/META-INF/org.apache.openejb.server.ServerService/cxf-rs')
+                .copyContent("etc/tomee-${classifier}/conf.d/hsql.properties", '/META-INF/org.apache.openejb.server.ServerService/hsql')
+                .copyContent("var/lib/tomee-${classifier}/bin/setenv.sh", '/init/setenv.sh')
+                .copyContent("etc/tomee-${classifier}/openejb.conf", '/default.openejb.conf')
+                .copyContent("etc/tomee-${classifier}/tomee.xml", '/tomee_xml.template')
+                .writeTemplate("usr/share/tomee-${classifier}/bin/tomee-instance.sh", '/init/tomee-instance.sh', tplParams)
+                .writeTemplate("etc/init.d/tomee-${classifier}", '/init/tomee.sh', tplParams)
+                .buildChangelog()
+                .clean()
+        packageInfoMap.put(classifier, new PackageInfo(
+                classifier: classifier,
+                dataBuilder: builder
+        ))
+    }
+
+    private String getLibLinks(String classifier) {
+        def sw = new StringWriter()
+        def bw = new BufferedWriter(sw)
+        packageInfoMap.get(classifier).dataBuilder.symbolicLinks.each { String path, String reference ->
+            bw.writeLine("ln -sf ${reference} ${path}")
+        }
+        bw.close()
+        sw.close()
+        sw.toString().trim()
+    }
+
+    private createControlStructure(String classifier) {
+        def writeTpl = { ControlBuilder me, String toPath, String tplPath ->
+            def params = [
+                    classifier  : classifier,
+                    tomeeVersion: me.version,
+                    inMB        : me.installedSize.longValue().toString(),
+                    priority    : me.priority,
+                    libLinks    : getLibLinks(classifier)
+            ] as Map<String, String>
+            me.writeTemplate(toPath, tplPath, params)
+        }
+        def writeConffiles = { ControlBuilder me ->
+            me.withWriter('conffiles', { BufferedWriter out ->
+                me.withBaseDir { File baseDir ->
+                    def dataDir = new File(baseDir, 'data')
+                    new File(dataDir, "etc/tomee-${classifier}").eachFile {
+                        if (it.isFile()) {
+                            out.writeLine("/etc/tomee-${classifier}/${it.name}")
                         }
                     }
-                }
-            }
-        }
-        ant.delete(dir: unjarDir)
-    }
-
-    private File createTarGz(String classifier, String path) {
-        def dataDir = new File(path)
-        def tarFile = new File(dataDir.parent, "${dataDir.name}.tar")
-        def gzFile = new File(tarFile.parent, "${tarFile.name}.gz")
-        ant.with {
-            tar(destfile: tarFile) {
-                tarfileset(dir: dataDir.absolutePath, username: 'root', group: 'root', prefix: './') {
-                    include(name: "**/*")
-                    exclude(name: "**/*.sh")
-                    exclude(name: "**/postinst")
-                    exclude(name: "**/prerm")
-                    exclude(name: "**/postrm")
-                    if (classifier) {
-                        exclude(name: "**/init.d/tomee-${classifier}")
-                    }
-                }
-                tarfileset(dir: dataDir.absolutePath, username: 'root', group: 'root', filemode: '755', prefix: './') {
-                    include(name: "**/*.sh")
-                    include(name: "**/postinst")
-                    include(name: "**/prerm")
-                    include(name: "**/postrm")
-                    if (classifier) {
-                        include(name: "**/init.d/tomee-${classifier}")
+                    new File(dataDir, "etc/tomee-${classifier}/conf.d").eachFile {
+                        out.writeLine("/etc/tomee-${classifier}/conf.d/${it.name}")
                     }
+                    out.writeLine("/etc/init.d/tomee-${classifier}")
                 }
-            }
-            gzip(src: tarFile, destfile: gzFile)
-            delete(file: tarFile)
+            })
         }
-        gzFile
-    }
-
-    private static void arItem(ArArchiveOutputStream output, File file) {
-        def entry = new ArArchiveEntry(file.name, file.length())
-        output.putArchiveEntry(entry)
-        output << new FileInputStream(file)
-        output.closeArchiveEntry()
-    }
-
-    private static void arDebianBinary(ArArchiveOutputStream output) {
-        byte[] text = "2.0\n".getBytes()
-        def entry = new ArArchiveEntry('debian-binary', text.length)
-        output.putArchiveEntry(entry)
-        output.write(text)
-        output.closeArchiveEntry()
-    }
-
-    File compressFiles(String classifier, String... paths) {
-        def ar = new File(new File(paths[0]).parent, 'distribution.deb')
-        def output = new ArArchiveOutputStream(new FileOutputStream(ar))
-        arDebianBinary(output)
-        paths.collect({
-            createTarGz(classifier, it)
-        }).each {
-            arItem(output, it)
-        }
-        output.close()
-        ar
-    }
-
-    private File createPackageUnit(String classifier, String fileName) {
-        def filePath = new File(project.properties['distribution.workdir'] as String, fileName).absolutePath
-        def explodedPath = unzip(classifier, filePath)
-        def dataDir = createDataDir(classifier, explodedPath)
-        maskCodelessJars(classifier, dataDir)
-        def controlDir = createControlDir(classifier, dataDir)
-        def deb = compressFiles(classifier, controlDir, dataDir)
-        def debDir = new File(project.build.directory as String, 'deb')
-        debDir.mkdirs()
-        def result = new File(debDir, "apache-tomee-${classifier}-${project.version}.deb")
-        deb.renameTo(result)
-        result
-    }
-
-    private File createLibPackage(String packageName, File[] jars) {
-        def dataDir = new File(project.properties['distribution.workdir'] as String, "libDist/${packageName}/data")
-        def libDistDir = new File(dataDir, "usr/share/tomee-${packageName}/lib")
-        libDistDir.mkdirs()
-        jars.each { jar ->
-            ant.copy(file: jar, todir: libDistDir)
-        }
-        maskCodelessJars(packageName, dataDir.absolutePath)
-        def docDir = new File(dataDir, "usr/share/doc/tomee-${packageName}")
-        docDir.mkdirs()
-        buildChangelog(docDir)
-        writeTemplate(
-                new File(docDir, 'copyright'),
-                '/copyright.template',
-                [formattedDate: new Date().toString()]
-        )
-        def controlData = prepareControlData(dataDir.absolutePath)
-        writeTemplate(new File(controlData.controlDir, 'control'), '/control/lib_control.template', [
-                packageName : packageName,
-                tomeeVersion: controlData.version,
-                inMB        : controlData.installedSize.longValue()
-        ])
-        def deb = compressFiles(null as String, controlData.controlDir.absolutePath, controlData.dataDir.absolutePath)
-        def debDir = new File(project.build.directory as String, 'deb')
-        debDir.mkdirs()
-        def result = new File(debDir, "apache-tomee-${packageName}-${project.version}.deb")
-        deb.renameTo(result)
-        result
-    }
-
-    private File createTomcatLibPackage() {
-        def exploded = new File(project.properties['distribution.workdir'] as String, TOMCAT_EXPLODED_DIR)
-        ant.unzip(
-                src: new File(project.properties['distribution.workdir'] as String, 'tomcat.zip'),
-                dest: exploded
-        )
-        def tomcatLibs = new File(exploded, "apache-tomcat-${project.properties['tomcat.version']}/lib")
-        createLibPackage(TOMCAT_PACKAGE_NAME, tomcatLibs.listFiles())
+        new ControlBuilder(project, "tomee-${classifier}").buildControlDir()
+                .withMe({ writeTpl(it as ControlBuilder, 'control', '/control/control.template') })
+                .withMe({ writeTpl(it as ControlBuilder, 'postinst', '/control/postinst.sh') })
+                .withMe({ writeTpl(it as ControlBuilder, 'prerm', '/control/prerm.sh') })
+                .withMe({ writeTpl(it as ControlBuilder, 'postrm', '/control/postrm.sh') })
+                .withMe(writeConffiles)
     }
 
     void createPackage() {
-        createTomcatLibPackage()
-        createPackageUnit('jaxrs', 'tomee-jaxrs.zip')
-        createPackageUnit('webprofile', 'tomee-webprofile.zip')
-        createPackageUnit('plume', 'tomee-plume.zip')
-        createPackageUnit('plus', 'tomee-plus.zip')
+        def classifiers = ['webprofile', 'jaxrs', 'plus', 'plume']
+        createLibStructure(classifiers)
+        classifiers.each { createDataStructure(it) }
+        classifiers.each { createControlStructure(it) }
+        compressTool.createDebs()
     }
 
 }

Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageInfo.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageInfo.groovy?rev=1593167&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageInfo.groovy (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageInfo.groovy Thu May  8 01:41:37 2014
@@ -0,0 +1,25 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.tomee.deb
+
+class PackageInfo {
+    String classifier
+    DataBuilder dataBuilder
+    ControlBuilder controlBuilder
+}

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/ChangeLogBuilder.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/ChangeLogBuilder.groovy?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/ChangeLogBuilder.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/ChangeLogBuilder.groovy Thu May  8 01:41:37 2014
@@ -32,7 +32,7 @@ class ChangeLogBuilder {
             'fixVersion+is+not+EMPTY+' +
             'ORDER+BY+fixVersion+ASC&' +
             'startAt=${startAt}&maxResults=${maxResults}&' +
-            'fields=issuetype,priority,fixVersions,summary,resolutiondate'
+            'fields=issuetype,priority,fixVersions,summary,resolutiondate,project'
 
     static final JIRA_DT_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
     static final JIRA_RELEASE_DT_FORMAT = new SimpleDateFormat('yyyy-MM-dd')
@@ -66,12 +66,13 @@ class ChangeLogBuilder {
                 )
                 issue.fields.fixVersions.each { fixVersion ->
                     String versionName = fixVersion.name as String
-                    if (versionName.toLowerCase().contains('trunk') || !fixVersion.releaseDate) {
+                    if (!versionName.matches('[[0-9]+\\.]+[0-9]') || !fixVersion.releaseDate) {
                         return // not released yet
                     }
                     Date releaseDate = JIRA_RELEASE_DT_FORMAT.parse(fixVersion.releaseDate as String)
                     if (!versionsMap.containsKey(versionName)) {
                         versionsMap.put(versionName, new VersionIssues(
+                                project: issue.fields.project.name,
                                 version: versionName,
                                 releaseDate: releaseDate
                         ))
@@ -127,7 +128,7 @@ class ChangeLogBuilder {
             entryWriter.close()
 
             resultBufWriter.writeLine(logTemplate.make([
-                    projectName: projectName,
+                    projectName: versionIssues.project,
                     version    : versionIssues.version,
                     urgency    : versionUrgency,
                     fixDate    : LOG_RELEASE_DT_FORMAT.format(versionIssues.releaseDate),

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/VersionIssues.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/VersionIssues.groovy?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/VersionIssues.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/jira/VersionIssues.groovy Thu May  8 01:41:37 2014
@@ -19,6 +19,7 @@
 package org.apache.tomee.deb.jira
 
 class VersionIssues implements Comparable<VersionIssues> {
+    String project
     String version
     Date releaseDate
     List<IssueLog> issues = []

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template Thu May  8 01:41:37 2014
@@ -5,7 +5,7 @@ Section: java
 Priority: optional
 Homepage: http://tomee.apache.org/
 Architecture: all
-Depends: tomee-lib-tomcat (= ${tomeeVersion})
+Depends: libtomee-${classifier}-java (= ${tomeeVersion})
 Installed-Size: ${inMB}
 Maintainer: devlist <de...@tomee.apache.org>
 Description: Apache TomEE (${classifier})

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/lib_control.template
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/lib_control.template?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/lib_control.template (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/lib_control.template Thu May  8 01:41:37 2014
@@ -1,4 +1,4 @@
-Package: tomee-${packageName}
+Package: ${classifier}
 Version: ${tomeeVersion}
 Section: java
 Priority: optional
@@ -6,5 +6,5 @@ Homepage: http://tomee.apache.org/
 Architecture: all
 Installed-Size: ${inMB}
 Maintainer: devlist <de...@tomee.apache.org>
-Description: Apache TomEE Library (${packageName})
+Description: Apache TomEE Library (${classifier})
  This package provides libraries required by Apache TomEE

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh Thu May  8 01:41:37 2014
@@ -19,29 +19,30 @@ ln -sf /etc/tomee-${classifier} /usr/sha
 ln -sf /var/log/tomee-${classifier} /var/lib/tomee-${classifier}/logs
 
 # Creating links from catalina_base to the configuration files in catalina_home
+mkdir -p /var/lib/tomee-${classifier}/conf
 ln -sf /etc/tomee-${classifier}/server.xml /var/lib/tomee-${classifier}/conf/server.xml
 ln -sf /etc/tomee-${classifier}/tomcat-users.xml /var/lib/tomee-${classifier}/conf/tomcat-users.xml
 ln -sf /etc/tomee-${classifier}/openejb.conf /var/lib/tomee-${classifier}/conf/openejb.conf
 ln -sf /etc/tomee-${classifier}/tomee.xml /var/lib/tomee-${classifier}/conf/tomee.xml
 ln -sf /etc/tomee-${classifier}/conf.d /var/lib/tomee-${classifier}/conf/conf.d
 
-# Linking tomcat jars
-for tomcatJar in /usr/share/tomee-lib-tomcat/lib/*
-do
-    ln -sf \$tomcatJar /usr/share/tomee-${classifier}/lib/\$(basename "\$tomcatJar")
-done
-
 # Creating user apps directory. We dont want to erase it during an upgrade.
 if [ ! -d /var/lib/tomee-${classifier}-user-data ] ; then
     mkdir -p /var/lib/tomee-${classifier}-user-data/temp
 	mkdir -p /var/lib/tomee-${classifier}-user-data/webapps
-	ln -sf /usr/share/tomee-${classifier}/tomee-webapp /var/lib/tomee-${classifier}-user-data/webapps/tomee
+	ln -sf /usr/share/tomee-${classifier}/extras/tomee /var/lib/tomee-${classifier}-user-data/webapps/tomee
 fi
 ln -sf /var/lib/tomee-${classifier}-user-data/temp /var/lib/tomee-${classifier}/temp
 ln -sf /var/lib/tomee-${classifier}-user-data/webapps /var/lib/tomee-${classifier}/webapps
 
-groupadd apachetomee || true
-useradd --system apachetomee -g apachetomee || true
+groupadd apachetomee >/dev/null 2>&1 || true
+useradd --system apachetomee -g apachetomee >/dev/null 2>&1 || true
+
+# common jars links
+mkdir -p /usr/share/tomee-${classifier}/lib
+${libLinks}
+
+mkdir -p /var/log/tomee-${classifier}
 
 chown -R root:apachetomee /var/log/tomee-${classifier}
 chown -R root:apachetomee /var/lib/tomee-${classifier}
@@ -56,9 +57,9 @@ chmod -R g+w /var/log/tomee-${classifier
 chmod -R g+w /var/lib/tomee-${classifier}
 chmod -R g+w /var/lib/tomee-${classifier}-user-data
 
-update-rc.d tomee-${classifier} defaults
+update-rc.d tomee-${classifier} defaults >/dev/null 2>&1
 
-update-alternatives --install /etc/init.d/tomee tomee /etc/init.d/tomee-${classifier} ${priority}
+update-alternatives --install /etc/init.d/tomee tomee /etc/init.d/tomee-${classifier} ${priority} >/dev/null 2>&1
 
 echo "Apache TomEE classifier ${tomeeVersion} installed."
 echo "Reboot your machine or run 'service tomee-${classifier} start' to start TomEE."

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postrm.sh
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postrm.sh?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postrm.sh (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postrm.sh Thu May  8 01:41:37 2014
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-update-rc.d -f tomee-${classifier} remove
+update-rc.d -f tomee-${classifier} remove >/dev/null 2>&1
 
 if [ purge = "\$1" ]; then
     rm -Rf /var/lib/tomee-${classifier}-user-data

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh Thu May  8 01:41:37 2014
@@ -18,30 +18,9 @@
 service tomee-${classifier} stop || true
 
 # removing alternative
-update-alternatives --remove tomee /etc/init.d/tomee-${classifier}
+update-alternatives --remove tomee /etc/init.d/tomee-${classifier} >/dev/null 2>&1
 
-# removing link to /var/logs
-rm -f /var/lib/tomee-${classifier}/logs
-
-# removing non-configuration files
-rm -Rf /var/lib/tomee-${classifier}/apps
-rm -Rf /var/lib/tomee-${classifier}/conf
-rm -Rf /var/lib/tomee-${classifier}/bin
-rm /var/lib/tomee-${classifier}/temp
-rm /var/lib/tomee-${classifier}/webapps
-rm -Rf /var/lib/tomee-${classifier}/work
-
-# Unlinking tomcat jars
-for tomcatJar in /usr/share/tomee-lib-tomcat/lib/*
-do
-    rm /usr/share/tomee-${classifier}/lib/\$(basename "\$tomcatJar")
-done
-
-# removing files created by tomcat
-rm -Rf /var/lib/tomee-${classifier}/conf/Catalina
-
-# removing link to /etc
-rm -f /usr/share/tomee-${classifier}/conf
-
-# removing logs
+rm -Rf /var/lib/tomee-${classifier}/*
+rm -Rf /var/lib/tomee-${classifier}/*
 rm -Rf /var/log/tomee-${classifier}/*
+rm -Rf /usr/share/tomee-${classifier}/*

Copied: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/data/copyright.template (from r1592772, tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/copyright.template)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/data/copyright.template?p2=tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/data/copyright.template&p1=tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/copyright.template&r1=1592772&r2=1593167&rev=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/copyright.template (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/data/copyright.template Thu May  8 01:41:37 2014
@@ -1,5 +1,5 @@
 This package was debianized by the Apache TomEE dev Team <de...@tomee.apache.org> on
-${formattedDate}
+${new Date().toString()}
 
 Upstream Authors:
 

Modified: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/setenv.sh
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/setenv.sh?rev=1593167&r1=1593166&r2=1593167&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/setenv.sh (original)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/setenv.sh Thu May  8 01:41:37 2014
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/bash -e
 
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
@@ -15,4 +15,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-export CATALINA_PID=\$CATALINA_BASE/temp/tomee.pid
\ No newline at end of file
+export CATALINA_PID=$CATALINA_BASE/temp/tomee.pid
\ No newline at end of file