import org.elasticsearch.gradle.test.RunTask apply plugin: 'elasticsearch.build' /* We don't use the 'application' plugin because it builds a zip and tgz which * we don't want. */ description = 'Command line interface to Elasticsearch that speaks SQL' dependencies { compile "org.jline:jline:3.3.1" compile project(':x-pack-elasticsearch:sql:net-client') compile project(':x-pack-elasticsearch:sql:cli-proto') compile project(':x-pack-elasticsearch:sql:shared-proto') // Used by embedded sql instance testCompile project(":x-pack-elasticsearch:transport-client") testCompile project(path: ':x-pack-elasticsearch:plugin', configuration: 'testArtifacts') // NOCOMMIT remove this? testCompile project(':x-pack-elasticsearch:sql:test-utils') runtime "org.fusesource.jansi:jansi:1.16" runtime "org.elasticsearch:jna:4.4.0-1" } dependencyLicenses { mapping from: /cli-proto.*/, to: 'elasticsearch' mapping from: /shared-proto.*/, to: 'elasticsearch' mapping from: /net.*/, to: 'elasticsearch' ignoreSha 'cli-proto' ignoreSha 'shared-proto' ignoreSha 'net-client' } forbiddenApisMain { // does not depend on core, so only jdk and http signatures should be checked signaturesURLs = [this.class.getResource('/forbidden/jdk-signatures.txt')] } jar { // Bundle all dependencies into the jar. from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } } // Make the jar "executable" with `java -jar` manifest { attributes 'Main-Class': 'org.elasticsearch.xpack.sql.cli.Cli' } } // Needed so we can launch graphviz if it is installed project.compactProfile = 'full' forbiddenApisTest { //we are using jdk-internal instead of jdk-non-portable to allow for com.sun.net.httpserver.* usage bundledSignatures -= 'jdk-non-portable' bundledSignatures += 'jdk-internal' } thirdPartyAudit.excludes = [ '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' ] apply plugin: 'elasticsearch.rest-test' integTest.mustRunAfter test integTestCluster { distribution = 'zip' // NOCOMMIT make double sure we want all the modules plugin project(':x-pack-elasticsearch:plugin').path /* Get a "clean" test without the other x-pack features here and check them * all together later on. */ setting 'xpack.security.enabled', 'false' setting 'xpack.monitoring.enabled', 'false' setting 'xpack.ml.enabled', 'false' setting 'xpack.watcher.enabled', 'false' } task runServer(type: RunTask) { distribution = 'zip' plugin project(':x-pack-elasticsearch:plugin').path // Daemonize Elasticsearch so we can run the cli application daemonize = true /* Get a "clean" test without the other x-pack features here and check them * all together later on. */ setting 'xpack.security.enabled', 'false' setting 'xpack.monitoring.enabled', 'false' setting 'xpack.ml.enabled', 'false' setting 'xpack.watcher.enabled', 'false' } task run { /* We can't use JavaExec or Exec because neither support * ProcessBuilder.Redirect.INHERIT which is required to get full tty-support. */ dependsOn jar, runServer finalizedBy 'runServer#stop' description = 'Run the CLI and an Elasticsearch instant for it to connect to' doLast { List command = [new File(project.javaHome, '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("command: ${command}") new ProcessBuilder(command) .redirectOutput(ProcessBuilder.Redirect.INHERIT) .redirectInput(ProcessBuilder.Redirect.INHERIT) .redirectError(ProcessBuilder.Redirect.INHERIT) .start() .waitFor() } } // Allow for com.sun.net.httpserver.* usage for testing eclipse { classpath.file { whenMerged { cp -> def con = entries.find { e -> e.kind == "con" && e.toString().contains("org.eclipse.jdt.launching.JRE_CONTAINER") } con.accessRules.add(new org.gradle.plugins.ide.eclipse.model.AccessRule( "accessible", "com/sun/net/httpserver/*")) } } } forbiddenApisTest { bundledSignatures -= 'jdk-non-portable' bundledSignatures += 'jdk-internal' }