Nik Everett a8f40b3e04 Build: Assert jar LICENSE and NOTICE files match
Adds tasks that check that the all jars that we build have LICENSE.txt
and NOTICE.txt files and that the files are correct. Sets check to
depend on these task.

This is mostly there for extra parnoia because we automatically
configure all Jar tasks to include the LICENSE.txt and NOTICE.txt
files anyway. But it is quite possible to add configuration to those
tasks that would override either file.

This causes check to depend on several more things than it used to.
Take, for example, javadoc:

check depends on the new verifyJavadocJarNotice which depends on
extractJavadocJar which depends on javadocJar which depends on
javadoc, this check now depends on javadoc.
2018-04-25 19:53:24 -04:00

143 lines
4.9 KiB
Groovy

/*
* 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-shared-client')
compile xpackProject('plugin:sql:sql-proto')
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-proto.*/, to: 'elasticsearch'
mapping from: /sql-shared-client.*/, to: 'elasticsearch'
ignoreSha 'elasticsearch-cli'
ignoreSha 'elasticsearch-core'
ignoreSha 'elasticsearch'
ignoreSha 'sql-proto'
ignoreSha 'sql-shared-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
}
forbiddenApisMain {
signaturesURLs += file('src/forbidden/cli-signatures.txt').toURI().toURL()
}
forbiddenApisTest {
signaturesURLs += file('src/forbidden/cli-signatures.txt').toURI().toURL()
}
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
}