diff options
author | Andreas Beeker <kiwiwings@apache.org> | 2021-04-07 21:40:33 +0000 |
---|---|---|
committer | Andreas Beeker <kiwiwings@apache.org> | 2021-04-07 21:40:33 +0000 |
commit | b6aee1ef6d3e92a28ffd4b5c03e677b63b43747f (patch) | |
tree | ad9c7b312976c4ed113a7f3b5b4757bfe1b3eee6 /poi-ooxml-lite/build.gradle | |
parent | 6458acb931a0cc17b2d5ed205a1b3fbbb78b9193 (diff) | |
download | poi-b6aee1ef6d3e92a28ffd4b5c03e677b63b43747f.tar.gz poi-b6aee1ef6d3e92a28ffd4b5c03e677b63b43747f.zip |
65206 - Migrate ant / maven to gradle build
compile / jar / test of mrJars
don't include ants build.xml anymore
rename directories to match project and maven artifact names
refactor artifacts - so each project has one artifact
replace static references in hssf/dev tests with junit5 constructs, which had problems in parallel tests
increase gradle heap to 4gb because of OOM - maybe less would also work
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1888488 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi-ooxml-lite/build.gradle')
-rw-r--r-- | poi-ooxml-lite/build.gradle | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/poi-ooxml-lite/build.gradle b/poi-ooxml-lite/build.gradle new file mode 100644 index 0000000000..da40c6d1e8 --- /dev/null +++ b/poi-ooxml-lite/build.gradle @@ -0,0 +1,133 @@ +import java.util.function.Function +import java.util.regex.Pattern +import java.util.stream.Collectors + +/* ==================================================================== + 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. +==================================================================== */ + +plugins { + id 'java' + id 'maven-publish' + id 'java-library' +} + +final String JAVA9_SRC = 'src/main/java9' +final String JAVA9_OUT = "${buildDir}/classes/java9/main/" +final String VERSIONS9 = 'META-INF/versions/9' + +sourceSets { + main { + if (JavaVersion.current() != JavaVersion.VERSION_1_8) { + output.dir(JAVA9_OUT, builtBy: 'cacheJava9') + } + resources { + srcDirs += project(':poi-ooxml-full').sourceSets.main.output.findAll{it =~ /.*(classes\/java\/main|generated-resources)$/} + } + } +} + +dependencies { + api "org.apache.xmlbeans:xmlbeans:${xmlbeansVersion}" + implementation project(':poi-ooxml-full') + implementation project(path:':poi-integration', configuration:'tests') +} + +final MODULE_NAME = 'org.apache.poi.ooxml.schemas' +final Pattern MODULE_REGEX = ~'\\.jar$' +final List MAIN_MODULE_PATH = sourceSets.main.runtimeClasspath.findAll{ it.path =~ MODULE_REGEX }.collect{ it.parent }.unique() +final String OOXML_LITE_REPORT = '../build/ooxml-lite-report' + +task compileOoxmlLite() { + dependsOn ':poi-ooxml:build', ':poi-integration:build', ':poi-excelant:build' + + File fileIn = file("${OOXML_LITE_REPORT}.clazz") + File fileOut = file("src/main/java9/module-info.java") + + outputs.upToDateWhen{ + ant.uptodate(property: "ooxmlLiteUnchanged", srcfile: fileIn.path, targetfile: fileOut.path) + ant.properties.ooxmlLiteUnchanged + } + + doLast { + String header = fileOut.collect().findAll { !(it =~ /exports|}/) }.join('\n') + + // generate module-info based on exported classes + String exports = fileIn. + collect { " exports ${it.replaceAll('[/\\\\][^/\\\\]+$', '').replaceAll('[/\\\\]', '.')};" }. + findAll { !(it =~ /\.impl;$/) }.unique().sort().join('\n') + + String content = header + '\n' + exports + '\n}' + if (fileOut.text != content) { + fileOut.write content + } + } +} + + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +compileJava.dependsOn 'compileOoxmlLite' + +task compileJava9(type: JavaCompile, dependsOn: 'compileJava') { + sourceCompatibility = 9 + targetCompatibility = 9 + destinationDirectory = file(JAVA9_OUT + VERSIONS9) + source = file(JAVA9_SRC) + classpath = files() + doFirst { + options.compilerArgs = [ + '--patch-module', "${MODULE_NAME}=${project(':poi-ooxml-full').sourceSets.main.output.asPath}", + '--module-path', files(MAIN_MODULE_PATH).asPath + ] + } +} + +task cacheJava9(type: Copy, dependsOn: 'compileJava9') { + from(file(JAVA9_OUT + VERSIONS9)) + into(JAVA9_SRC) +} + +jar { + File clazzFile = file("${OOXML_LITE_REPORT}.clazz") + File xsbsFile = file("${OOXML_LITE_REPORT}.xsb") + if (clazzFile.exists() && xsbsFile.exists()) { + List clazz = clazzFile.collect { "${it}.class" } + List clazzInner = clazzFile.collect { "${it}\$*.class" } + List xsbs = xsbsFile.collect { "org/apache/poi/schemas/ooxml/system/ooxml/${it}.xsb" } + includes = clazz + clazzInner + xsbs + ['META-INF/versions/**', 'org/apache/poi/schemas/ooxml/element/**'] + } + + destinationDirectory = file("../build/dist/maven/${project.archivesBaseName}") + + if (JavaVersion.current() == JavaVersion.VERSION_1_8) { + into('META-INF/versions/9') { + from JAVA9_SRC include '*.class' + } + } + + // ignore second module-info.class from poi-ooxml-full + // duplicatesStrategy = 'exclude' + includeEmptyDirs = false + + manifest { + attributes('Automatic-Module-Name' : MODULE_NAME, 'Multi-Release': 'true') + } +} + |