141 lines
4.8 KiB
Groovy
141 lines
4.8 KiB
Groovy
import org.elasticsearch.gradle.precommit.ForbiddenApisCliTask
|
|
|
|
/*
|
|
* This project is named sql-cli because it is in the "org.elasticsearch.plugin"
|
|
* group and it'd be super confusing for it to just be called "cli" there.
|
|
* Also, the jar we ultimately want to ship is sql-cli-VERSION.jar which is
|
|
* exactly what gradle makes by default when the project is named sql-cli.
|
|
*/
|
|
|
|
apply plugin: 'elasticsearch.build'
|
|
/* We don't use the 'application' plugin because it builds a zip and tgz which
|
|
* we don't want. */
|
|
|
|
archivesBaseName = 'elasticsearch-sql-cli'
|
|
|
|
description = 'Command line interface to Elasticsearch that speaks SQL'
|
|
|
|
dependencies {
|
|
compile "org.jline:jline:3.6.0"
|
|
compile xpackProject('plugin:sql:sql-client')
|
|
compile xpackProject('plugin:sql:sql-action')
|
|
compile "org.elasticsearch:elasticsearch-cli:${version}"
|
|
|
|
runtime "org.fusesource.jansi:jansi:1.16"
|
|
runtime "org.elasticsearch:jna:${versions.jna}"
|
|
|
|
testCompile "org.elasticsearch.test:framework:${version}"
|
|
}
|
|
|
|
dependencyLicenses {
|
|
mapping from: /elasticsearch-cli.*/, to: 'elasticsearch'
|
|
mapping from: /elasticsearch-core.*/, to: 'elasticsearch'
|
|
mapping from: /jackson-.*/, to: 'jackson'
|
|
mapping from: /lucene-.*/, to: 'lucene'
|
|
mapping from: /sql-action.*/, to: 'elasticsearch'
|
|
mapping from: /sql-client.*/, to: 'elasticsearch'
|
|
ignoreSha 'elasticsearch-cli'
|
|
ignoreSha 'elasticsearch-core'
|
|
ignoreSha 'elasticsearch'
|
|
ignoreSha 'sql-action'
|
|
ignoreSha 'sql-client'
|
|
}
|
|
|
|
/*
|
|
* Bundle all dependencies into the main jar and mark it as executable it
|
|
* can be easilly shipped around and used.
|
|
*/
|
|
jar {
|
|
from({
|
|
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
|
|
configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
|
|
}) {
|
|
// We don't need the META-INF from the things we bundle. For now.
|
|
exclude 'META-INF/*'
|
|
}
|
|
manifest {
|
|
attributes 'Main-Class': 'org.elasticsearch.xpack.sql.cli.Cli'
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Build a jar that doesn't include the dependencies bundled that we can
|
|
* include with QA tests along side Elasticsearch without breaking
|
|
* jarhell.
|
|
*/
|
|
configurations {
|
|
nodeps
|
|
}
|
|
task nodepsJar(type: Jar) {
|
|
appendix 'nodeps'
|
|
from sourceSets.main.output
|
|
}
|
|
artifacts {
|
|
nodeps nodepsJar
|
|
}
|
|
|
|
|
|
tasks.withType(ForbiddenApisCliTask) {
|
|
signaturesFiles += files('src/forbidden/cli-signatures.txt')
|
|
}
|
|
|
|
thirdPartyAudit.excludes = [
|
|
// jLine's optional dependencies
|
|
'org.apache.sshd.client.SshClient',
|
|
'org.apache.sshd.client.auth.keyboard.UserInteraction',
|
|
'org.apache.sshd.client.channel.ChannelShell',
|
|
'org.apache.sshd.client.channel.ClientChannel',
|
|
'org.apache.sshd.client.channel.ClientChannelEvent',
|
|
'org.apache.sshd.client.future.AuthFuture',
|
|
'org.apache.sshd.client.future.ConnectFuture',
|
|
'org.apache.sshd.client.future.OpenFuture',
|
|
'org.apache.sshd.client.session.ClientSession',
|
|
'org.apache.sshd.common.Factory',
|
|
'org.apache.sshd.common.channel.PtyMode',
|
|
'org.apache.sshd.common.config.keys.FilePasswordProvider',
|
|
'org.apache.sshd.common.util.io.NoCloseInputStream',
|
|
'org.apache.sshd.common.util.io.NoCloseOutputStream',
|
|
'org.apache.sshd.server.Command',
|
|
'org.apache.sshd.server.Environment',
|
|
'org.apache.sshd.server.ExitCallback',
|
|
'org.apache.sshd.server.SessionAware',
|
|
'org.apache.sshd.server.Signal',
|
|
'org.apache.sshd.server.SshServer',
|
|
'org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider',
|
|
'org.apache.sshd.server.scp.ScpCommandFactory$Builder',
|
|
'org.apache.sshd.server.session.ServerSession',
|
|
'org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory$Builder',
|
|
'org.mozilla.universalchardet.UniversalDetector',
|
|
'org.fusesource.jansi.internal.Kernel32$FOCUS_EVENT_RECORD',
|
|
'org.fusesource.jansi.internal.Kernel32$MOUSE_EVENT_RECORD',
|
|
]
|
|
|
|
task runcli {
|
|
description = 'Run the CLI and connect to elasticsearch running on 9200'
|
|
dependsOn 'assemble'
|
|
doLast {
|
|
List command = [new File(project.runtimeJavaHome, 'bin/java').absolutePath]
|
|
if ('true'.equals(System.getProperty('debug', 'false'))) {
|
|
command += '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000'
|
|
}
|
|
command += ['-jar', jar.archivePath.absolutePath]
|
|
logger.info("running the cli with: ${command}")
|
|
|
|
new ProcessBuilder(command)
|
|
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
|
|
.redirectInput(ProcessBuilder.Redirect.INHERIT)
|
|
.redirectError(ProcessBuilder.Redirect.INHERIT)
|
|
.start()
|
|
.waitFor()
|
|
}
|
|
}
|
|
|
|
// Use the jar for testing so we can get the proper version information
|
|
test {
|
|
classpath -= compileJava.outputs.files
|
|
classpath -= configurations.compile
|
|
classpath -= configurations.runtime
|
|
classpath += jar.outputs.files
|
|
dependsOn jar
|
|
}
|