Standalone distribution assembly and 'run' task for Luke (#1742)

Co-authored-by: Tomoko Uchida <tomoko.uchida.1111@gmail.com>
This commit is contained in:
Dawid Weiss 2020-08-12 16:28:48 +02:00 committed by GitHub
parent a5543dfb51
commit 3579056249
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 137 additions and 1 deletions

View File

@ -14,14 +14,28 @@
* 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')
@ -29,7 +43,123 @@ dependencies {
implementation project(':lucene:queryparser')
implementation project(':lucene:misc')
implementation 'org.apache.logging.log4j:log4j-core'
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)
}
}
}

View File

@ -0,0 +1,6 @@
This is Luke, Apache Lucene low-level index inspection and repair utility.
Luke requires Java ${required.java.version}. You can start it with:
java -jar ${luke.cmd}
Happy index hacking!