You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2020/08/12 14:29:00 UTC

[lucene-solr] branch master updated: Standalone distribution assembly and 'run' task for Luke (#1742)

This is an automated email from the ASF dual-hosted git repository.

dweiss pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new 3579056  Standalone distribution assembly and 'run' task for Luke (#1742)
3579056 is described below

commit 35790562495f95266d57ccdb6fcc298e914eae47
Author: Dawid Weiss <dw...@apache.org>
AuthorDate: Wed Aug 12 16:28:48 2020 +0200

    Standalone distribution assembly and 'run' task for Luke (#1742)
    
    Co-authored-by: Tomoko Uchida <to...@gmail.com>
---
 lucene/luke/build.gradle                | 132 +++++++++++++++++++++++++++++++-
 lucene/luke/src/distribution/README.txt |   6 ++
 2 files changed, 137 insertions(+), 1 deletion(-)

diff --git a/lucene/luke/build.gradle b/lucene/luke/build.gradle
index 6e32b1b..f6df53c 100644
--- a/lucene/luke/build.gradle
+++ b/lucene/luke/build.gradle
@@ -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)
+    }
+  }
+}
diff --git a/lucene/luke/src/distribution/README.txt b/lucene/luke/src/distribution/README.txt
new file mode 100644
index 0000000..0efea2d
--- /dev/null
+++ b/lucene/luke/src/distribution/README.txt
@@ -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!
\ No newline at end of file