blob: f6df53cbee63cb559446360c60eb6c3c06693941 [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.taskdefs.condition.Os
import org.apache.tools.ant.filters.*
import java.nio.file.Files
apply plugin: 'java-library'
description = 'Luke - Lucene Toolbox'
ext {
standaloneDistDir = file("$buildDir/${archivesBaseName}-${project.version}")
}
configurations {
standalone
implementation.extendsFrom standalone
}
dependencies {
api project(':lucene:core')
implementation 'org.apache.logging.log4j:log4j-core'
implementation project(':lucene:codecs')
implementation project(':lucene:backward-codecs')
implementation project(':lucene:analysis:common')
implementation project(':lucene:queries')
implementation project(':lucene:queryparser')
implementation project(':lucene:misc')
standalone project(":lucene:highlighter")
standalone project(':lucene:analysis:icu')
standalone project(':lucene:analysis:kuromoji')
standalone project(':lucene:analysis:morfologik')
standalone project(':lucene:analysis:nori')
standalone project(':lucene:analysis:opennlp')
standalone project(':lucene:analysis:phonetic')
standalone project(':lucene:analysis:smartcn')
standalone project(':lucene:analysis:stempel')
standalone project(':lucene:suggest')
testImplementation 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 default JAR without any class path information
// (this may actually be wrong - perhaps we should add the
// "distribution" paths here.
jar {
manifest {
}
}
// 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.txt", {
filteringCharset = 'UTF-8'
filter(ExpandProperties, project: antHelper)
})
})
into standaloneDistDir
doLast {
logger.lifecycle("Standalone Luke distribution assembled. You can run it with:\n"
+ "java -jar " + file("${standaloneDistDir}/${standaloneJar.archiveFileName.get()}"))
}
}
// 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"
}
// Create a set of artifacts for standalone distribution in a specific
// exported configuration so that it can be pulled in by other projects.
artifacts {
standalone standaloneDistDir, {
builtBy standaloneAssemble
}
}
// 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...")
def javaExecutable = {
def registry = project.extensions.getByType(JavaInstallationRegistry)
def currentJvm = registry.installationForCurrentVirtualMachine.get()
currentJvm.getJavaExecutable().asFile
}()
ant.exec(
executable: javaExecutable,
spawn: true,
vmlauncher: true
) {
arg(value: '-jar')
arg(value: file("${standaloneDistDir}/${standaloneJar.archiveFileName.get()}").absolutePath)
}
}
}