blob: 150424003dbfe449307880b99c638879619cfdfe [file] [log] [blame]
/*
* 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.
*/
import org.apache.tools.ant.filters.*
apply plugin: 'java-library'
description = 'Luke - Lucene Toolbox'
ext {
standaloneDistDir = file("$buildDir/${archivesBaseName}-${project.version}")
}
dependencies {
moduleApi project(':lucene:core')
moduleImplementation project(':lucene:codecs')
moduleImplementation project(':lucene:backward-codecs')
moduleImplementation project(':lucene:analysis:common')
moduleImplementation project(':lucene:queries')
moduleImplementation project(':lucene:queryparser')
moduleImplementation project(':lucene:misc')
moduleImplementation project(":lucene:highlighter")
moduleImplementation project(':lucene:analysis:icu')
moduleImplementation project(':lucene:analysis:kuromoji')
moduleImplementation project(':lucene:analysis:morfologik')
moduleImplementation project(':lucene:analysis:nori')
moduleImplementation project(':lucene:analysis:opennlp')
moduleImplementation project(':lucene:analysis:phonetic')
moduleImplementation project(':lucene:analysis:smartcn')
moduleImplementation project(':lucene:analysis:stempel')
moduleImplementation project(':lucene:suggest')
moduleTestImplementation project(':lucene:test-framework')
}
// Configure main class name for all JARs.
tasks.withType(Jar) {
manifest {
attributes("Main-Class": "org.apache.lucene.luke.app.desktop.LukeMain")
}
}
// Configure the main class and version attribute for the module system.
tasks.compileJava.configure {
options.javaModuleMainClass.set("org.apache.lucene.luke.app.desktop.LukeMain")
}
// Process UTF8 property files to unicode escapes.
tasks.withType(ProcessResources).configureEach { task ->
task.filesMatching("**/messages*.properties", {
filteringCharset = 'UTF-8'
filter(EscapeUnicode)
})
}
// Configure "stand-alone" JAR with proper dependency classpath links.
task standaloneJar(type: Jar) {
dependsOn classes
archiveFileName = "${archivesBaseName}-${project.version}-standalone.jar"
from(sourceSets.main.output)
// manifest attributes are resolved eagerly and we can't access runtimeClasspath
// at configuration time so push it until execution.
doFirst {
manifest {
attributes("Class-Path": configurations.runtimeClasspath.collect {
"${it.getName()}"
}.join(' '))
}
}
}
task standaloneAssemble(type: Sync) {
def antHelper = new org.apache.tools.ant.Project()
afterEvaluate {
def substituteProperties = [
"required.java.version": project.java.targetCompatibility,
"luke.cmd": "${standaloneJar.archiveFileName.get()}"
]
substituteProperties.each { k, v -> antHelper.setProperty(k.toString(), v.toString()) }
}
from standaloneJar
from configurations.runtimeClasspath
from(file("src/distribution"), {
filesMatching("README.md", {
filteringCharset = 'UTF-8'
filter(ExpandProperties, project: antHelper)
})
})
into standaloneDistDir
doLast {
logger.lifecycle(
"""
Standalone Luke distribution assembled. You can run it with:
java -jar "${standaloneDistDir}/${standaloneJar.archiveFileName.get()}"
java --module-path "${standaloneDistDir}" -m org.apache.lucene.luke
"""
)
}
}
// Attach standalone distribution assembly to main assembly.
assemble.dependsOn standaloneAssemble
// Create a standalone package bundle.
task standalonePackage(type: Tar) {
from standaloneAssemble
into "${archivesBaseName}-${project.version}/"
compression = Compression.GZIP
archiveFileName = "${archivesBaseName}-${project.version}-standalone.tgz"
}
// Utility to launch Luke (and fork it from the build).
task run() {
dependsOn standaloneAssemble
description "Launches (spawns) Luke directly from the build process."
group "Utility launchers"
doFirst {
logger.lifecycle("Launching Luke ${project.version} right now...")
ant.exec(
executable: rootProject.ext.runtimeJavaExecutable,
spawn: true,
vmlauncher: true
) {
arg(value: '-jar')
arg(value: file("${standaloneDistDir}/${standaloneJar.archiveFileName.get()}").absolutePath)
}
}
}