Initial gradle build layer.

This commit is contained in:
Dawid Weiss 2019-12-02 15:34:57 +01:00
parent 71f1bc33b3
commit d4a9842375
89 changed files with 3132 additions and 0 deletions

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Ignore all differences in line endings for the lock file.
versions.lock text eol=lf

3
.gitignore vendored
View File

@ -30,3 +30,6 @@ __pycache__
/dev-tools/scripts/scripts.iml
.DS_Store
build/
.gradle/
.idea/

17
.travis.yml Normal file
View File

@ -0,0 +1,17 @@
language: java
jdk:
- openjdk11
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
script:
- ./gradlew assemble --scan --stacktrace -Ptravis

49
build.gradle Normal file
View File

@ -0,0 +1,49 @@
plugins {
id "base"
id "com.palantir.consistent-versions" version "1.12.4"
id "com.gradle.build-scan" version "3.0"
}
// Project version and main properties. Applies to all projects.
allprojects {
version = "9.0.0-SNAPSHOT"
}
// Include smaller chunks configuring dedicated build areas.
// Some of these intersect or add additional functionality.
// The order of inclusion of these files shouldn't matter (but may
// if the build file is incorrectly written and evaluates something
// eagerly).
// CI systems.
apply from: file('gradle/buildscan.gradle')
apply from: file('gradle/travis.gradle')
// Set up defaults and configure aspects for certain modules or functionality
// (java, tests)
apply from: file('gradle/defaults.gradle')
apply from: file('gradle/defaults-java.gradle')
apply from: file('gradle/testing/defaults-tests.gradle')
apply from: file('gradle/testing/defaults-tests-solr.gradle')
apply from: file('gradle/testing/randomization.gradle')
apply from: file('gradle/defaults-maven.gradle')
// IDE settings and specials.
apply from: file('gradle/defaults-idea.gradle')
// Additional development aids.
apply from: file('gradle/maven-local.gradle')
apply from: file('gradle/testing/per-project-summary.gradle')
apply from: file('gradle/testing/slowest-tests-at-end.gradle')
apply from: file('gradle/help.gradle')
// Ant-compatibility layer. ALL OF THESE SHOULD BE GONE at some point. They are
// here so that we can coexist with current ant build but they are indicative
// of potential problems with the build conventions, dependencies, etc.
apply from: file('gradle/ant-compat/folder-layout.gradle')
apply from: file('gradle/ant-compat/misc.gradle')
apply from: file('gradle/ant-compat/resolve.gradle')
apply from: file('gradle/ant-compat/post-jar.gradle')
apply from: file('gradle/ant-compat/test-classes-cross-deps.gradle')
apply from: file('gradle/ant-compat/artifact-naming.gradle')

52
gradle.TODO Normal file
View File

@ -0,0 +1,52 @@
The gradle build is currently missing or could use some love in the following areas:
- Apply forbiddenAPIs
- configure security policy/ sandboxing for tests (!).
- add test 'beasting' (rerunning the same suite multiple times). I'm afraid it'll be difficult
to run it sensibly because gradle doesn't offer cwd separation for the forked test runners (?)
- jar checksums, jar checksum computation and validation.
this should be done without intermediate folders (directly
on dependency sets).
- add a :helpDeps explanation to how the dependency system works (palantir plugin, lockfile) and
how to retrieve structured information about current dependencies of a given module
(in a tree-like output).
- identify and list precommit tasks so that they can be ported one by one.
- identify and port any other "check" utilities that may be called from ant.
- identify and port various "regenerate" tasks from ant builds (javacc, precompiled automata, etc.)
- add rendering of javadocs (gradlew javadoc) and attaching them to maven publications.
- fill in POM details in gradle/defaults-maven.gradle so that they reflect the previous content better
(dependencies aside).
- Add any IDE integration layers that should be added (I use IntelliJ and it imports the project
out of the box, without the need for any special tuning).
- Clean up dependencies, especially for Solr: any { transitive = false } should just explicitly
exclude whatever they don't need (and their dependencies currently declared explicitly
should be folded). Figure out which scope to import a dependency to.
- add Solr packaging for docs/* (see TODO in packaging/build.gradle; currently XSLT...)
- I didn't bother adding Solr dist/test-framework to packaging (who'd use it from a binary
distribution?)
Intentional differences:
- the back-compatibility target 'resolve' is added to gradle but it's really for informational purposes
and debugging. Packaging should be done from subcomponent configurations and dependencies,
not from source folders... "gradlew -p packaging assemble" puts together the entire Solr distribution
under packaging/build where it doesn't interfere with sources.
'resolve' for Lucene also does *not* copy test dependencies under lib/ (like ant version does).
- transitive export of certain core libraries from solr-core/ solrj (guava, etc.).

4
gradle.properties Normal file
View File

@ -0,0 +1,4 @@
systemProp.file.encoding=UTF-8
org.gradle.parallel=true
org.gradle.priority=low

View File

@ -0,0 +1,15 @@
// Stick to previous artifact names (not identical to path/ folders).
configure(subprojects.findAll { it.path.contains(':solr:contrib:') }) {
project.archivesBaseName = project.archivesBaseName.replace("-contrib-", "-")
}
// This project has a different artifact name (solr-contrib-cell). Don't know why.
configure(project(":solr:contrib:extraction")) {
archivesBaseName = "solr-cell"
}
configure(subprojects.findAll { it.path.contains(':lucene:analysis:') }) {
project.archivesBaseName = project.archivesBaseName.replace("-analysis-", "-analyzers-")
}

View File

@ -0,0 +1,26 @@
// Adapt to custom folder convention.
allprojects {
plugins.withType(JavaPlugin) {
sourceSets {
main.java.srcDirs = ['src/java']
main.resources.srcDirs = ['src/resources']
test.java.srcDirs = ['src/test']
test.resources.srcDirs = ['src/test-files']
}
task copyTestResources(type: Copy) {
from('src/test') {
exclude '**/*.java'
}
into sourceSets.test.java.outputDir
}
processTestResources.dependsOn copyTestResources
}
}
// Adapt to custom 'web' folder location.
configure(project(":solr:webapp")) {
plugins.withType(WarPlugin) {
webAppDirName = "web"
}
}

View File

@ -0,0 +1,42 @@
// Exclude inner classes from testing.
allprojects {
tasks.withType(Test) { task ->
exclude '**/*$*'
}
}
// Exclude test classes that are not actually stand-alone tests (they're executed from other stuff).
configure(project(":lucene:replicator")) {
plugins.withType(JavaPlugin) {
test {
exclude "**/SimpleServer*"
}
}
}
// Resources from top-level project folder are looked up via getClass(). Strange.
configure(project(":lucene:benchmark")) {
plugins.withType(JavaPlugin) {
task syncConf(type: Sync) {
from('conf')
into file("${sourceSets.test.java.outputDir}/conf")
}
processTestResources.dependsOn syncConf
}
}
// lucene:replicator has httpclient dependency with transitive commons-logging:1.2 but currently
// requires 1.1.2. This commons-logging should be removed entirely and replaced with slf4j-to-*
// redirector.
configure(project(":lucene:replicator")) {
plugins.withType(JavaPlugin) {
configurations.all {
resolutionStrategy {
force 'commons-logging:commons-logging:1.1.3'
}
}
}
}

View File

@ -0,0 +1,34 @@
// This adds a configuration and artifact to solr-core which exports "post.jar" tool.
// this should be a separate project instead (it is self-contained and classes are reused
// in many places).
configure(project(":solr:core")) {
plugins.withType(JavaPlugin) {
configurations {
postJar
}
task assemblePostJar(type: Jar) {
dependsOn classes
archiveFileName = "post.jar"
destinationDirectory = file("${buildDir}/postJar")
from(sourceSets.main.output, {
include "org/apache/solr/util/CLIO.class"
include "org/apache/solr/util/SimplePostTool*.class"
include "org/apache/solr/util/RTimer*.class"
})
manifest {
attributes("Main-Class": "org.apache.solr.util.SimplePostTool")
}
}
artifacts {
postJar assemblePostJar
}
assemble.dependsOn assemblePostJar
}
}

View File

@ -0,0 +1,210 @@
// For Lucene, a 'resolve' task that copies any (non-project) dependencies
// under lib/ folder.
configure(allprojects.findAll {project -> project.path.startsWith(":lucene") }) {
plugins.withType(JavaPlugin) {
configurations {
runtimeLibs {
extendsFrom runtimeElements
extendsFrom testRuntimeClasspath
}
}
task resolve(type: Sync) {
from({
return configurations.runtimeLibs.copyRecursive { dep ->
!(dep instanceof org.gradle.api.artifacts.ProjectDependency)
}
})
into 'lib'
}
}
}
// For Solr, a 'resolve' task is much more complex. There are three folders:
// lib/
// test-lib/
// lucene-libs/
//
// There doesn't seem to be one ideal set of rules on how these should be created, but
// I tried to imitate the current (master) logic present in ivy and ant files in this way:
//
// The "solr platform" set of dependencies is a union of all deps for (core, solrj, server).
//
// Then:
// lib - these are module's "own" dependencies, excluding Lucene's that are not present in the
// solr platform.
// lucene-libs - these are lucene modules declared as module's dependencies and not
// present in solr platform.
// test-lib/ - libs not present in solr platform and not included in solr:test-framework.
//
// None of these are really needed with gradle... they should be collected just in the distribution
// package, not at each project's level.
//
// Unfortunately this "resolution" process is also related to how the final Solr packaging is assembled.
// I don't know how to untie these two cleanly.
//
configure(allprojects.findAll {project -> project.path.startsWith(":solr:contrib") }) {
plugins.withType(JavaPlugin) {
ext {
packagingDir = file("${buildDir}/packaging")
deps = file("${packagingDir}/${project.name}")
}
configurations {
solrPlatformLibs
solrTestPlatformLibs
runtimeLibs {
extendsFrom runtimeElements
}
packaging
}
dependencies {
solrPlatformLibs project(":solr:core")
solrPlatformLibs project(":solr:solrj")
solrPlatformLibs project(":solr:server")
solrTestPlatformLibs project(":solr:test-framework")
}
// An aggregate that configures lib, lucene-libs and test-lib in a temporary location.
task assemblePackaging(type: Sync) {
from "README.txt"
from ({
def externalLibs = configurations.runtimeLibs.copyRecursive { dep ->
if (dep instanceof org.gradle.api.artifacts.ProjectDependency) {
return !dep.dependencyProject.path.startsWith(":solr")
} else {
return true
}
}
return externalLibs - configurations.solrPlatformLibs
}, {
exclude "lucene-*"
into "lib"
})
from ({
def projectLibs = configurations.runtimeLibs.copyRecursive { dep ->
(dep instanceof org.gradle.api.artifacts.ProjectDependency)
}
return projectLibs - configurations.solrPlatformLibs
}, {
include "lucene-*"
into "lucene-libs"
})
into deps
}
task syncLib(type: Sync) {
dependsOn assemblePackaging
from(file("${deps}/lib"), {
include "**"
})
into file("${projectDir}/lib")
}
task syncTestLib(type: Sync) {
// From test runtime classpath exclude:
// 1) project dependencies (and their dependencies)
// 2) runtime dependencies
// What remains is this module's "own" test dependency.
from({
def testRuntimeLibs = configurations.testRuntimeClasspath.copyRecursive { dep ->
!(dep instanceof org.gradle.api.artifacts.ProjectDependency)
}
return testRuntimeLibs - configurations.runtimeLibs - configurations.solrTestPlatformLibs
})
into file("${projectDir}/test-lib")
}
task resolve() {
dependsOn syncLib, syncTestLib
}
// Contrib packaging currently depends on internal resolve.
artifacts {
packaging packagingDir, {
builtBy assemblePackaging
}
}
}
}
configure(project(":solr:example")) {
evaluationDependsOn(":solr:example") // explicitly wait for other configs to be applied
task resolve(type: Copy) {
from(configurations.postJar, {
into "exampledocs/"
})
from(configurations.dih, {
into "example-DIH/solr/db/lib"
})
into projectDir
}
}
configure(project(":solr:server")) {
evaluationDependsOn(":solr:server")
task resolve(type: Copy) {
dependsOn assemblePackaging
from({ packagingDir }, {
include "**/*.jar"
include "solr-webapp/webapp/**"
includeEmptyDirs false
})
into projectDir
}
}
configure(project(":solr:core")) {
evaluationDependsOn(":solr:core")
configurations {
runtimeLibs {
extendsFrom runtimeElements
}
}
task resolve(type: Sync) {
from({
def ownDeps = configurations.runtimeLibs.copyRecursive { dep ->
if (dep instanceof org.gradle.api.artifacts.ProjectDependency) {
return !dep.dependencyProject.path.startsWith(":solr")
} else {
return true
}
}
return ownDeps
}, {
exclude "lucene-*"
})
into "lib"
}
}
configure(project(":solr:solrj")) {
evaluationDependsOn(":solr:solrj")
task resolve(type: Sync) {
from({ configurations.runtimeClasspath }, {
})
into "lib"
}
}

View File

@ -0,0 +1,53 @@
// Set up cross-project dependency on test classes. This should be resolved by pulling reused classes into
// a separate regular module. Exporting test classes is sort of weird.
configure([project(":lucene:spatial3d"),
project(":lucene:analysis:common"),
project(":lucene:backward-codecs"),
project(":lucene:queryparser"),
project(":solr:contrib:dataimporthandler")]) {
plugins.withType(JavaPlugin) {
configurations {
testClassesExported
}
artifacts {
testClassesExported sourceSets.test.java.outputDir, {
builtBy testClasses
}
}
}
}
configure(project(":lucene:spatial-extras")) {
plugins.withType(JavaPlugin) {
dependencies {
testImplementation project(path: ':lucene:spatial3d', configuration: 'testClassesExported')
}
}
}
configure(project(":solr:core")) {
plugins.withType(JavaPlugin) {
dependencies {
testImplementation project(path: ':lucene:backward-codecs', configuration: 'testClassesExported')
testImplementation project(path: ':lucene:queryparser', configuration: 'testClassesExported')
}
}
}
configure(project(":solr:contrib:analysis-extras")) {
plugins.withType(JavaPlugin) {
dependencies {
testImplementation project(path: ':lucene:analysis:common', configuration: 'testClassesExported')
testImplementation project(path: ':solr:contrib:dataimporthandler', configuration: 'testClassesExported')
}
}
}
configure(project(":solr:contrib:dataimporthandler-extras")) {
plugins.withType(JavaPlugin) {
dependencies {
testImplementation project(path: ':solr:contrib:dataimporthandler', configuration: 'testClassesExported')
}
}
}

5
gradle/buildscan.gradle Normal file
View File

@ -0,0 +1,5 @@
buildScan {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
}

View File

@ -0,0 +1,12 @@
allprojects {
apply plugin: 'idea'
idea {
module {
outputDir file('build/idea/classes/main')
testOutputDir file('build/idea/classes/test')
downloadSources = true
}
}
}

View File

@ -0,0 +1,11 @@
// Configure Java project defaults.
allprojects {
plugins.withType(JavaPlugin) {
sourceCompatibility = "11"
targetCompatibility = "11"
compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"
}
}

View File

@ -0,0 +1,121 @@
// Maven publications and configuration.
//
// the 'published' list contains an explicit list of all projects
// which should be published to Maven repositories.
configure(rootProject) {
ext {
published = [
":lucene:analysis:common",
":lucene:analysis:icu",
":lucene:analysis:kuromoji",
":lucene:analysis:morfologik",
":lucene:analysis:nori",
":lucene:analysis:opennlp",
":lucene:analysis:phonetic",
":lucene:analysis:smartcn",
":lucene:analysis:stempel",
":lucene:backward-codecs",
":lucene:benchmark",
":lucene:classification",
":lucene:codecs",
":lucene:core",
":lucene:demo",
":lucene:expressions",
":lucene:facet",
":lucene:grouping",
":lucene:highlighter",
":lucene:join",
":lucene:luke",
":lucene:memory",
":lucene:misc",
":lucene:monitor",
":lucene:queries",
":lucene:queryparser",
":lucene:replicator",
":lucene:sandbox",
":lucene:spatial",
":lucene:spatial-extras",
":lucene:spatial3d",
":lucene:suggest",
":lucene:test-framework",
":solr:core",
":solr:solrj",
":solr:contrib:analysis-extras",
":solr:contrib:dataimporthandler",
":solr:contrib:dataimporthandler-extras",
":solr:contrib:analytics",
":solr:contrib:clustering",
":solr:contrib:extraction",
":solr:contrib:langid",
":solr:contrib:jaegertracer-configurator",
":solr:contrib:prometheus-exporter",
":solr:contrib:velocity",
":solr:test-framework",
]
}
configure(subprojects.findAll { it.path in rootProject.published }) {
apply plugin: 'maven-publish'
apply plugin: 'signing'
publishing {
// TODO: Add publishing repository details.
}
plugins.withType(JavaPlugin) {
task sourcesJar(type: Jar, dependsOn: classes) {
archiveClassifier = 'sources'
from sourceSets.main.allJava
}
task javadocJar(type: Jar, dependsOn: javadoc) {
archiveClassifier = 'javadoc'
from javadoc.destinationDir
}
publishing {
def configurePom = {
name = "Apache Solr/Lucene (${project.name})"
licenses {
license {
name = 'Apache 2'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
}
publications {
// JARS and sources, no javadocs (for local inspection only).
jars(MavenPublication) {
from components.java
groupId = project.group
artifactId = project.archivesBaseName
artifact sourcesJar
pom(configurePom)
}
// Full set of signed artifacts.
signed(MavenPublication) {
from components.java
groupId = project.group
artifactId = project.archivesBaseName
artifact sourcesJar
artifact javadocJar
pom(configurePom)
}
}
}
signing {
sign publishing.publications.signed
}
}
}
}

18
gradle/defaults.gradle Normal file
View File

@ -0,0 +1,18 @@
allprojects {
apply plugin: 'base'
group "org.apache"
// Repositories to fetch dependencies from.
repositories {
mavenCentral()
maven {
url "https://maven.restlet.com"
}
}
// Artifacts will have names after full gradle project path
// so :solr:core will have solr-core.jar, etc.
project.archivesBaseName = project.path.replaceAll("^:", "").replace(':', '-')
}

30
gradle/help.gradle Normal file
View File

@ -0,0 +1,30 @@
// Add "help" tasks which display plain text files under 'help' folder.
configure(rootProject) {
def helpFiles = [
["Workflow", "help/workflow.txt", "Typical workflow commands."],
["Ant", "help/ant-gradle.txt", "Ant-gradle migration help."],
["Tests", "help/tests.txt", "Tests, filtering, beasting, etc."],
]
helpFiles.each { section, path, sectionInfo ->
task "help${section}" {
group = 'Help (developer guides and hints)'
description = sectionInfo
doFirst {
println "\n" + rootProject.file(path).getText("UTF-8")
}
}
}
help {
doLast {
println ""
println "This is an experimental Lucene/Solr gradle build. See some"
println "guidelines, ant-equivalent commands etc. under help/*; or type:"
helpFiles.each { entry ->
println " gradlew :help${entry[0]} # ${entry[2]}"
}
}
}
}

42
gradle/maven-local.gradle Normal file
View File

@ -0,0 +1,42 @@
// This adds a root project task to install all artifacts to a build-local
// Maven repository (so that pom files can be manually reviewed).
configure(rootProject) {
ext {
mavenLocalDir = file("${buildDir}/maven-local")
}
task mavenLocal() {
group "Publishing"
description "Publish Maven JARs and POMs locally to " + mavenLocalDir
doLast {
logger.lifecycle "Local maven artifacts (poms, jars) created at: ${mavenLocalDir}"
}
}
task mavenLocalClean(type: Delete) {
delete mavenLocalDir
}
configure(subprojects.findAll { it.path in rootProject.published }) {
plugins.withType(PublishingPlugin) {
publishing {
repositories {
maven {
name = 'build'
url = mavenLocalDir
}
}
}
tasks.matching { it.name == "publishJarsPublicationToBuildRepository" }.all { task ->
// Clean prior to republishing to local build repository.
task.dependsOn mavenLocalClean
// Attach to root project's mavenLocal task.
mavenLocal.dependsOn task
}
}
}
}

View File

@ -0,0 +1,13 @@
import org.apache.tools.ant.taskdefs.condition.Os
// Solr-specific test configs.
configure(allprojects.findAll {project -> project.path.startsWith(":solr") }) {
plugins.withType(JavaPlugin) {
test {
systemProperty 'tests.disableHdfs', Os.isFamily(Os.FAMILY_WINDOWS) ? 'true' : 'false'
systemProperty 'jetty.testMode', '1'
systemProperty 'jetty.insecurerandom', '1'
}
}
}

View File

@ -0,0 +1,51 @@
import org.apache.tools.ant.taskdefs.condition.Os
import org.gradle.api.tasks.testing.logging.*
allprojects {
plugins.withType(JavaPlugin) {
project.ext {
testsWorkDir = file("${buildDir}/tmp/tests-cwd")
testsTmpDir = file("${buildDir}/tmp/tests-tmp")
}
test {
workingDir testsWorkDir
useJUnit()
// Set up default parallel execution limits.
maxParallelForks = (int) Math.max(1, Math.min(Runtime.runtime.availableProcessors() / 2.0, 3.0))
minHeapSize = "256m"
maxHeapSize = "512m"
systemProperty 'java.awt.headless', 'true'
systemProperty 'jdk.map.althashing.threshold', '0'
if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
systemProperty 'java.security.egd', 'file:/dev/./urandom'
}
// Set up cwd and temp locations.
systemProperty("java.io.tmpdir", testsTmpDir)
doFirst {
testsWorkDir.mkdirs()
testsTmpDir.mkdirs()
}
// Set up logging.
testLogging {
events TestLogEvent.FAILED
exceptionFormat TestExceptionFormat.FULL
showExceptions true
showCauses true
showStackTraces true
}
doFirst {
// Print some diagnostics about locations used.
logger.info("Test folders for {}: cwd={}, tmp={}", project.path, testsWorkDir, testsTmpDir)
}
}
}
}

View File

@ -0,0 +1,20 @@
// Per-project test summary.
allprojects {
tasks.withType(Test) { task ->
afterSuite { desc, result ->
if (!desc.parent) {
if (result.testCount > 0) {
def components = [
"test(s)" : result.testCount,
"failure(s)": result.failedTestCount,
"skipped" : result.skippedTestCount
].findAll { k, v -> v > 0 }.collect { k, v -> "$v $k" }.join(", ")
logger.lifecycle("${task.path} (${result.resultType}): ${components}")
}
}
}
}
}

View File

@ -0,0 +1,72 @@
// Configure test randomization seeds and derived test properties.
allprojects {
ext {
// Support passing overrides via -P or -D.
propertyOrDefault = { propName, defValue ->
def result
if (project.hasProperty(propName)) {
result = project.getProperty(propName)
} else if (System.properties.containsKey(propName)) {
result = System.properties.get(propName)
} else {
result = defValue
}
return result
}
}
}
// Pick the "root" seed from which everything else is derived.
configure(rootProject) {
ext {
rootSeed = propertyOrDefault('tests.seed', String.format("%08X", new Random().nextLong()))
}
task randomizationInfo() {
doFirst {
logger.lifecycle("Running tests with randomization seed: tests.seed=${rootSeed}")
}
}
}
// Any test task will trigger display of randomization settings.
allprojects {
tasks.withType(Test) { task ->
task.dependsOn rootProject.randomizationInfo
}
}
// Append randomization properties to tests, allow overriding these properties with -Pkey=value.
allprojects {
tasks.withType(Test) { task ->
[
'tests.seed': rootSeed,
'tests.multiplier': '1',
'tests.codec': 'random',
'tests.postingsformat': 'random',
'tests.docvaluesformat': 'random',
'tests.locale': 'random',
'tests.timezone': 'random',
'tests.directory': 'random',
'tests.nightly': 'false',
'tests.weekly': 'false',
'tests.monster': 'false',
'tests.slow': 'true',
'tests.verbose': 'false',
'tests.filterstacks': 'true',
'tests.asserts': 'true',
'tests.iters': null,
'tests.filter': null,
'tests.linedocsfile': 'europarl.lines.txt.gz',
'tests.cleanthreads.sysprop': 'perMethod'
].each { propName, defValue ->
def value = propertyOrDefault(propName, defValue)
if (value != null) {
systemProperty propName, value
}
}
}
}

View File

@ -0,0 +1,31 @@
// Add test duration summary at the end of the build.
def allTests = []
allprojects {
tasks.withType(Test) { task ->
afterTest { desc, result ->
def duration = (result.getEndTime() - result.getStartTime())
allTests << [
name : "${desc.className.replaceAll('.+\\.', "")}.${desc.name} (${project.name})",
duration: duration
]
}
}
}
gradle.buildFinished {
if (allTests) {
def slowest = allTests
.sort { a, b -> b.duration.compareTo(a.duration) }
.take(10)
.findAll { e -> e.duration >= 500 }
.collect { e -> String.format(Locale.ROOT, "%5.2fs %s", e.duration / 1000d, e.name) }
if (slowest) {
logger.lifecycle("The slowest tests (exceeding 500 ms) during this run:\n " +
slowest.join("\n "))
}
}
}

21
gradle/travis.gradle Normal file
View File

@ -0,0 +1,21 @@
// Emit more periodic info for travis builds (otherwise they timeout due to
// no input on the console).
import org.gradle.api.tasks.testing.logging.*
if (hasProperty("travis")) {
allprojects {
tasks.withType(Test) { task ->
maxParallelForks = 2
afterSuite { desc, result ->
if (desc.className) {
def tc = result.testCount
def tcs = (tc == 1 ? 'test' : 'tests')
logger.lifecycle("Completed: ${desc.className} (${tc} ${tcs})")
}
}
}
}
}

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-5.6.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

172
gradlew vendored Executable file
View File

@ -0,0 +1,172 @@
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

84
gradlew.bat vendored Normal file
View File

@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

49
help/ant.txt Normal file
View File

@ -0,0 +1,49 @@
Gradle for Ant users
====================
This shows some common ant targets and their equivalent Gradle commands.
Examples below assume cwd is at the top of the checkout (gradlew
script available from ./). Quoted [string] gives a better or more
conventional and commonly used task alternative.
Gradle tasks apply to all modules that contain a given task name. Use
"-p" switch with a directory or a colon-notation to specify a particular
task or module. For example these two are equivalent:
gradlew -p lucene/core check
gradlew :lucene:core:check
List of common dev task equivalents
-----------------------------------
ant clean => gradlew clean
ant jar => gradlew jar [better: gradlew assemble]
ant compile => gradlew classes [better: gradlew assemble]
gradlew testClasses [better: gradlew assemble]
ant validate => gradlew check
ant test => gradlew test
ant jar-checksums => TODO
ant clean-jars => NO REPLACEMENT
ant precommit => gradlew check -x test
ant get-maven-poms => gradlew mavenLocal
Solr-specific targets
---------------------
Assemble Solr distribution at solr/packaging/build/...
ant create-package => gradlew -p solr/packaging assemble
"Resolve" libraries by copying them to lib/ and other source
locations. This task should *not* be used anymore. It is added
for backward compatibility with ant (and for debugging)
but it mixes sources with output locations and this workflow
should be discouraged. Instead run assemble on packaging (above).
ant resolve => gradlew -p solr resolve

83
help/tests.txt Normal file
View File

@ -0,0 +1,83 @@
Testing
=======
Examples below assume cwd at the gradlew script in the top directory of
the project's checkout.
Generic test/ checkup commands
------------------------------
Run all unit tests:
gradlew test
Run all verification tasks, including tests:
gradlew check
Run all verification tasks, excluding tests (-x is gradle's generic task
exclusion mechanism):
gradlew check -x test
Run verification for a selected module only:
gradlew :lucene:core:check # By full gradle project path
gradlew -p lucene/core check # By folder designation + task
Randomization
-------------
Run tests with the given starting seed:
gradlew :lucene:misc:test -Ptests.seed=DEADBEEF
Filtering
---------
Run tests of lucene-core module:
gradlew -p lucene/core test
Run a single test case (from a single module). Uses gradle's built-in filtering
(https://docs.gradle.org/current/userguide/java_testing.html#test_filtering):
gradlew -p lucene/core test --tests TestDemo
Run all tests in a package:
gradlew -p lucene/core test --tests "org.apache.lucene.document.*"
Run all test classes/ methods that match this pattern:
gradlew -p lucene/core test --tests "*testFeatureMissing*"
Test groups
-----------
Tests can be filtered by an annotation they're marked with.
Some test group annotations include: @AwaitsFix, @Nightly, @Slow
This uses filtering infrastructure on the *runner* (randomizedtesting),
not gradle's built-in mechanisms (but it can be combined with "--tests").
For example, run all lucene-core tests annotated as @Slow:
gradlew -p lucene/core test -Ptests.filter=@Slow
Test group filters can be combined into Boolean expressions:
gradlew -p lucene/core test "default and not(@awaitsfix or @slow)"
Reiteration ("beasting")
------------------------
Multiply each test case N times (this works by repeating the same test
within the same JVM; it also works in IDEs):
gradlew -p lucene/core test --tests TestDemo -Ptests.iters=5

33
help/workflow.txt Normal file
View File

@ -0,0 +1,33 @@
Typical workflow and tasks
==========================
This shows some typical workflow gradle commands.
Run tests on a module:
gradlew -p lucene/core test
Run test of a single-class (run "gradlew :helpTests" for more):
gradlew -p lucene/core test --tests "*Demo*"
Run all tests and validation checks on a module:
gradlew -p lucene/core check
Run all tests and validation checks on everything:
gradlew check
Run all validation checks but skip all tests:
gradlew check -x test
Assemble a single module's JAR (here for lucene-core):
gradlew -p lucene/core assemble
ls lucene/core/build/libs
Create all distributable packages, POMs, etc. and create a
local maven repository for inspection:
gradlew mavenLocal
ls -R build/maven-local/
Put together Solr distribution:
gradlew -p solr/packaging assemble
ls solr/packaging/build/solr-*

View File

@ -0,0 +1,7 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,10 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
api 'com.ibm.icu:icu4j'
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,8 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,13 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
api 'org.carrot2:morfologik-stemming'
implementation 'org.carrot2:morfologik-polish'
implementation 'ua.net.nlp:morfologik-ukrainian-search'
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,8 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,9 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
api 'org.apache.opennlp:opennlp-tools'
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,11 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
implementation 'commons-codec:commons-codec'
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,8 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,8 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,7 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,22 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation project(':lucene:analysis:common')
implementation project(':lucene:facet')
implementation project(':lucene:highlighter')
implementation project(':lucene:queries')
implementation project(':lucene:spatial-extras')
implementation project(':lucene:queryparser')
implementation "org.apache.commons:commons-compress"
implementation "com.ibm.icu:icu4j"
implementation "org.locationtech.spatial4j:spatial4j"
implementation("net.sourceforge.nekohtml:nekohtml", {
exclude module: "xml-apis"
})
testImplementation project(':lucene:test-framework')
}

3
lucene/build.gradle Normal file
View File

@ -0,0 +1,3 @@
subprojects {
group "org.apache.lucene"
}

View File

@ -0,0 +1,12 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation project(':lucene:queries')
implementation project(':lucene:grouping')
testImplementation project(':lucene:test-framework')
testImplementation project(':lucene:analysis:common')
testImplementation project(':lucene:codecs')
}

View File

@ -0,0 +1,6 @@
apply plugin: 'java-library'
dependencies {
implementation project(':lucene:core')
testImplementation project(':lucene:test-framework')
}

7
lucene/core/build.gradle Normal file
View File

@ -0,0 +1,7 @@
apply plugin: 'java-library'
dependencies {
testImplementation project(':lucene:codecs')
testImplementation project(':lucene:test-framework')
}

12
lucene/demo/build.gradle Normal file
View File

@ -0,0 +1,12 @@
apply plugin: 'java-library'
dependencies {
implementation project(':lucene:core')
implementation project(':lucene:facet')
implementation project(':lucene:queries')
implementation project(':lucene:analysis:common')
implementation project(':lucene:queryparser')
implementation project(':lucene:expressions')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,20 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation project(':lucene:codecs')
implementation 'org.antlr:antlr4-runtime'
// It is awkward that we force-omit the intermediate dependency here...
// The dependency chain is:
// asm-commons -> asm-tree -> asm
// Should we really go through these hoops?
implementation 'org.ow2.asm:asm'
implementation('org.ow2.asm:asm-commons', {
exclude group: "org.ow2.asm", module: "asm-tree"
})
testImplementation project(':lucene:test-framework')
}

12
lucene/facet/build.gradle Normal file
View File

@ -0,0 +1,12 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation 'com.carrotsearch:hppc'
testImplementation project(':lucene:test-framework')
testImplementation project(':lucene:queries')
}

View File

@ -0,0 +1,10 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation project(':lucene:queries')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,12 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation project(':lucene:queries')
implementation project(':lucene:memory')
testImplementation project(':lucene:test-framework')
testImplementation project(':lucene:analysis:common')
}

6
lucene/join/build.gradle Normal file
View File

@ -0,0 +1,6 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
}

16
lucene/luke/build.gradle Normal file
View File

@ -0,0 +1,16 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation project(':lucene:codecs')
implementation project(':lucene:backward-codecs')
implementation project(':lucene:analysis:common')
implementation project(':lucene:queries')
implementation project(':lucene:queryparser')
implementation project(':lucene:misc')
implementation 'org.apache.logging.log4j:log4j-core'
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,9 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
testImplementation project(':lucene:queryparser')
}

6
lucene/misc/build.gradle Normal file
View File

@ -0,0 +1,6 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,11 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation project(':lucene:memory')
implementation project(':lucene:analysis:common')
testImplementation project(':lucene:queryparser')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,8 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
testImplementation project(':lucene:expressions')
}

View File

@ -0,0 +1,9 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:queries')
api project(':lucene:sandbox')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,19 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
implementation project(':lucene:facet')
implementation('org.apache.httpcomponents:httpclient', {
exclude group: "commons-codec", module: "commons-codec"
})
implementation 'org.eclipse.jetty:jetty-server'
implementation('org.eclipse.jetty:jetty-servlet', {
exclude group: "org.eclipse.jetty", module: "jetty-security"
})
implementation 'org.eclipse.jetty:jetty-continuation'
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,6 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,14 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:spatial3d')
api 'org.locationtech.spatial4j:spatial4j'
api 'io.sgr:s2-geometry-library-java'
testImplementation project(':lucene:test-framework')
testImplementation 'org.locationtech.jts:jts-core'
testImplementation 'org.locationtech.spatial4j:spatial4j::tests'
}

View File

@ -0,0 +1,6 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,6 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,8 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
testImplementation project(':lucene:test-framework')
}

View File

@ -0,0 +1,11 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api ("com.carrotsearch.randomizedtesting:randomizedtesting-runner")
api ('org.hamcrest:hamcrest-core')
api ("junit:junit")
implementation project(':lucene:codecs')
}

55
settings.gradle Normal file
View File

@ -0,0 +1,55 @@
include "lucene:analysis:common"
include "lucene:analysis:icu"
include "lucene:analysis:kuromoji"
include "lucene:analysis:morfologik"
include "lucene:analysis:nori"
include "lucene:analysis:opennlp"
include "lucene:analysis:phonetic"
include "lucene:analysis:smartcn"
include "lucene:analysis:stempel"
include "lucene:backward-codecs"
include "lucene:benchmark"
include "lucene:classification"
include "lucene:codecs"
include "lucene:core"
include "lucene:demo"
include "lucene:expressions"
include "lucene:facet"
include "lucene:grouping"
include "lucene:highlighter"
include "lucene:join"
include "lucene:luke"
include "lucene:memory"
include "lucene:misc"
include "lucene:monitor"
include "lucene:queries"
include "lucene:queryparser"
include "lucene:replicator"
include "lucene:sandbox"
include "lucene:spatial"
include "lucene:spatial-extras"
include "lucene:spatial3d"
include "lucene:suggest"
include "lucene:test-framework"
include "solr:solrj"
include "solr:core"
include "solr:server"
include "solr:contrib:analysis-extras"
include "solr:contrib:dataimporthandler"
include "solr:contrib:dataimporthandler-extras"
include "solr:contrib:analytics"
include "solr:contrib:clustering"
include "solr:contrib:extraction"
include "solr:contrib:langid"
include "solr:contrib:jaegertracer-configurator"
include "solr:contrib:prometheus-exporter"
include "solr:contrib:velocity"
include "solr:contrib:ltr"
include "solr:webapp"
include "solr:test-framework"
include "solr:solr-ref-guide"
include "solr:example"
include "solr:packaging"

3
solr/build.gradle Normal file
View File

@ -0,0 +1,3 @@
subprojects {
group "org.apache.solr"
}

View File

@ -0,0 +1,16 @@
apply plugin: 'java-library'
dependencies {
api project(':solr:core')
implementation project(':lucene:analysis:icu')
implementation project(':lucene:analysis:smartcn')
implementation project(':lucene:analysis:morfologik')
implementation project(':lucene:analysis:opennlp')
implementation project(':lucene:analysis:smartcn')
implementation project(':lucene:analysis:stempel')
testImplementation project(':solr:test-framework')
}

View File

@ -0,0 +1,6 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
testImplementation project(':solr:test-framework')
}

View File

@ -0,0 +1,12 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
implementation project(':lucene:analysis:common')
implementation('org.carrot2:carrot2-mini', {
exclude group: "org.simpleframework", module: "simple-xml"
})
testImplementation project(':solr:test-framework')
}

View File

@ -0,0 +1,14 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
implementation project(':solr:contrib:dataimporthandler')
implementation project(':solr:contrib:extraction')
implementation ('javax.activation:activation')
implementation ('com.sun.mail:javax.mail')
implementation ('com.sun.mail:gimap')
testImplementation project(':solr:test-framework')
}

View File

@ -0,0 +1,15 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
testImplementation project(':solr:test-framework')
testImplementation('org.mockito:mockito-core', {
exclude group: "net.bytebuddy", module: "byte-buddy-agent"
})
testImplementation ('org.hsqldb:hsqldb')
testImplementation ('org.apache.derby:derby')
testImplementation ('org.objenesis:objenesis')
}

View File

@ -0,0 +1,55 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
// We export tika because other contribs depend on it (and its submodules)
// and we don't want to duplicate the dependency across different contribs.
api ('org.apache.tika:tika-core') { transitive = false }
api ('org.apache.tika:tika-parsers') { transitive = false }
runtimeOnly ('org.apache.james:apache-mime4j-core') { transitive = false }
runtimeOnly ('org.apache.james:apache-mime4j-dom') { transitive = false }
runtimeOnly ('org.apache.tika:tika-java7') { transitive = false }
runtimeOnly ('org.apache.tika:tika-xmp') { transitive = false }
implementation ('com.healthmarketscience.jackcess:jackcess') { transitive = false }
implementation ('com.healthmarketscience.jackcess:jackcess-encrypt') { transitive = false }
implementation ('org.gagravarr:vorbis-java-tika') { transitive = false }
implementation ('org.gagravarr:vorbis-java-core') { transitive = false }
implementation ('org.apache.commons:commons-compress') { transitive = false }
implementation ('org.apache.pdfbox:pdfbox') { transitive = false }
implementation ('org.apache.pdfbox:pdfbox-tools') { transitive = false }
implementation ('org.apache.pdfbox:fontbox') { transitive = false }
implementation ('org.apache.pdfbox:jempbox') { transitive = false }
implementation ('org.bouncycastle:bcmail-jdk15on') { transitive = false }
implementation ('org.bouncycastle:bcpkix-jdk15on') { transitive = false }
implementation ('org.bouncycastle:bcprov-jdk15on') { transitive = false }
implementation ('org.apache.poi:poi') { transitive = false }
implementation ('org.apache.poi:poi-scratchpad') { transitive = false }
implementation ('org.apache.poi:poi-ooxml') { transitive = false }
implementation ('org.apache.poi:poi-ooxml-schemas') { transitive = false }
implementation ('org.apache.xmlbeans:xmlbeans') { transitive = false }
implementation ('org.apache.commons:commons-collections4') { transitive = false }
implementation ('com.github.virtuald:curvesapi') { transitive = false }
implementation ('org.ccil.cowan.tagsoup:tagsoup') { transitive = false }
implementation ('com.googlecode.mp4parser:isoparser') { transitive = false }
implementation ('org.aspectj:aspectjrt') { transitive = false }
implementation ('com.drewnoakes:metadata-extractor') { transitive = false }
implementation ('de.l3s.boilerpipe:boilerpipe') { transitive = false }
implementation ('com.rometools:rome') { transitive = false }
implementation ('com.rometools:rome-utils') { transitive = false }
implementation ('org.jdom:jdom2') { transitive = false }
implementation ('com.googlecode.juniversalchardet:juniversalchardet') { transitive = false }
implementation ('org.tukaani:xz') { transitive = false }
implementation ('com.adobe.xmp:xmpcore') { transitive = false }
implementation ('com.pff:java-libpst') { transitive = false }
implementation ('org.tallison:jmatio') { transitive = false }
implementation ('com.epam:parso') { transitive = false }
implementation ('org.brotli:dec') { transitive = false }
implementation ('xerces:xercesImpl') { transitive = false }
implementation ('com.ibm.icu:icu4j')
testImplementation project(':solr:test-framework')
}

View File

@ -0,0 +1,12 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
implementation ("io.jaegertracing:jaeger-thrift", {
exclude group: "com.squareup.okhttp3", module: "okhttp"
exclude group: "com.google.code.gson", module: "gson"
})
testImplementation project(':solr:test-framework')
}

View File

@ -0,0 +1,15 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
implementation ('org.apache.tika:tika-core') { transitive = false }
implementation 'com.cybozu.labs:langdetect'
implementation 'net.arnx:jsonic'
implementation 'org.apache.opennlp:opennlp-tools'
testImplementation project(':solr:test-framework')
}

View File

@ -0,0 +1,14 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
implementation project(':lucene:analysis:common')
testImplementation('org.mockito:mockito-core', {
exclude group: "net.bytebuddy", module: "byte-buddy-agent"
})
testImplementation ('org.objenesis:objenesis')
testImplementation ('org.restlet.jee:org.restlet.ext.servlet')
testImplementation project(':solr:test-framework')
}

View File

@ -0,0 +1,28 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
implementation project(':lucene:analysis:common')
implementation ('io.prometheus:simpleclient')
implementation ('io.prometheus:simpleclient_common')
implementation ('io.prometheus:simpleclient_httpserver')
implementation ('net.thisptr:jackson-jq', {
exclude group: "org.jruby.joni", module: "joni"
})
implementation ('net.sourceforge.argparse4j:argparse4j')
testImplementation ('org.apache.httpcomponents:httpcore')
testImplementation ('org.eclipse.jetty:jetty-servlet')
testImplementation project(':solr:test-framework')
}
// Add two folders to default packaging.
assemblePackaging {
from(projectDir, {
include "bin/**"
include "conf/**"
})
}

View File

@ -0,0 +1,14 @@
apply plugin: 'java-library'
dependencies {
implementation project(':solr:core')
implementation('org.apache.velocity.tools:velocity-tools-view-jsp', {
exclude group: "commons-beanutils", module: "commons-beanutils"
exclude group: "org.apache.commons", module: "commons-digester3"
exclude group: "com.github.cliftonlabs", module: "json-simple"
})
testImplementation project(':solr:test-framework')
}

129
solr/core/build.gradle Normal file
View File

@ -0,0 +1,129 @@
apply plugin: 'java-library'
dependencies {
api project(':lucene:core')
api project(':lucene:analysis:common')
api project(':lucene:analysis:kuromoji')
api project(':lucene:analysis:nori')
api project(':lucene:analysis:phonetic')
api project(':lucene:backward-codecs')
api project(':lucene:classification')
api project(':lucene:codecs')
api project(':lucene:expressions')
api project(':lucene:grouping')
api project(':lucene:highlighter')
api project(':lucene:join')
api project(':lucene:misc')
api project(':lucene:queries')
api project(':lucene:queryparser')
api project(':lucene:sandbox')
api project(':lucene:spatial-extras')
api project(':lucene:suggest')
// Export these dependencies so that they're imported transitively by
// other modules.
api ('com.google.guava:guava', {
exclude group: "org.codehaus.mojo", module: "animal-sniffer-annotations"
exclude group: "com.google.j2objc", module: "j2objc-annotations"
exclude group: "com.google.errorprone", module: "error_prone_annotations"
exclude group: "org.checkerframework", module: "checker-qual"
exclude group: "com.google.code.findbugs", module: "jsr305"
})
api project(':solr:solrj')
api project(':solr:server')
api 'org.apache.commons:commons-lang3'
api 'com.carrotsearch:hppc'
api 'com.fasterxml.jackson.core:jackson-databind'
api 'commons-cli:commons-cli'
api 'commons-codec:commons-codec'
api 'commons-collections:commons-collections'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-smile'
implementation('com.github.ben-manes.caffeine:caffeine', {
exclude group: "org.checkerframework", module: "checker-qual"
exclude group: "com.google.errorprone", module: "error_prone_annotations"
})
implementation 'com.github.zafarkhaja:java-semver'
implementation 'com.google.re2j:re2j'
implementation('com.jayway.jsonpath:json-path', {
exclude group: "net.minidev", module: "json-smart"
})
implementation 'com.tdunning:t-digest'
implementation 'commons-fileupload:commons-fileupload'
implementation 'io.opentracing:opentracing-api'
implementation 'io.opentracing:opentracing-noop'
implementation 'io.opentracing:opentracing-util'
implementation 'org.apache.commons:commons-exec'
implementation 'org.apache.commons:commons-text'
implementation("org.apache.commons:commons-configuration2", {
exclude group: "commons-logging", module: "commons-logging"
})
implementation 'org.apache.htrace:htrace-core4'
implementation 'org.apache.logging.log4j:log4j-api'
implementation 'org.apache.logging.log4j:log4j-core'
implementation 'org.apache.logging.log4j:log4j-slf4j-impl'
api 'org.bitbucket.b_c:jose4j'
implementation 'org.codehaus.janino:commons-compiler'
implementation 'org.codehaus.janino:janino'
api 'org.restlet.jee:org.restlet'
implementation 'org.rrd4j:rrd4j'
implementation 'org.restlet.jee:org.restlet.ext.servlet'
implementation ('org.apache.calcite.avatica:avatica-core') { transitive = false }
implementation ('org.apache.calcite:calcite-core') { transitive = false }
implementation ('org.apache.calcite:calcite-linq4j') { transitive = false }
implementation ('org.apache.curator:curator-client') { transitive = false }
implementation ('org.apache.curator:curator-framework') { transitive = false }
implementation ('org.apache.hadoop:hadoop-annotations') { transitive = false }
implementation ('org.apache.hadoop:hadoop-auth') { transitive = false }
implementation ('org.apache.hadoop:hadoop-common') { transitive = false }
implementation ('org.apache.hadoop:hadoop-hdfs-client') { transitive = false }
implementation ('net.hydromatic:eigenbase-properties') { transitive = false }
runtimeOnly ('org.apache.curator:curator-recipes') { transitive = false }
runtimeOnly ('org.apache.kerby:kerb-core')
runtimeOnly ('org.apache.kerby:kerb-util')
runtimeOnly ('org.apache.kerby:kerby-asn1')
runtimeOnly ('org.apache.kerby:kerby-pkix')
runtimeOnly ('com.google.protobuf:protobuf-java')
testImplementation project(':lucene:analysis:icu')
testImplementation project(':solr:contrib:analysis-extras')
testImplementation project(':solr:test-framework')
testImplementation ('org.apache.hadoop:hadoop-common::tests') { transitive = false }
testImplementation ('org.apache.hadoop:hadoop-hdfs') { transitive = false }
testImplementation ('org.apache.hadoop:hadoop-hdfs::tests') { transitive = false }
testImplementation ('org.apache.hadoop:hadoop-minikdc') { transitive = false }
testImplementation ('org.apache.kerby:kerb-client') { transitive = false }
testImplementation ('org.apache.kerby:kerb-common') { transitive = false }
testImplementation ('org.apache.kerby:kerb-identity') { transitive = false }
testImplementation ('org.apache.kerby:kerb-server') { transitive = false }
testImplementation ('org.apache.kerby:kerb-simplekdc') { transitive = false }
testImplementation ('org.apache.kerby:kerb-admin') { transitive = false }
testImplementation ('org.apache.kerby:kerby-kdc') { transitive = false }
testImplementation ('com.sun.jersey:jersey-servlet:1.19.4') { transitive = false }
testImplementation 'com.google.protobuf:protobuf-java'
testImplementation 'commons-logging:commons-logging'
testImplementation('org.mockito:mockito-core', {
exclude group: "net.bytebuddy", module: "byte-buddy-agent"
})
testRuntimeOnly 'org.slf4j:log4j-over-slf4j'
}

46
solr/example/build.gradle Normal file
View File

@ -0,0 +1,46 @@
// I am not convinced packaging of examples should be a separate project... Seems more logical to
// move it to just the packaging project (?). Let's leave it for now though.
configurations {
packaging
postJar
dih
}
dependencies {
postJar project(path: ":solr:core", configuration: "postJar")
dih 'org.hsqldb:hsqldb'
dih 'org.apache.derby:derby'
}
ext {
packagingDir = file("${buildDir}/packaging")
}
task assemblePackaging(type: Sync) {
from(projectDir, {
include "example-DIH/**"
include "exampledocs/**"
include "files/**"
include "films/**"
include "README.txt"
exclude "**/*.jar"
})
from(configurations.postJar, {
into "exampledocs/"
})
from(configurations.dih, {
into "example-DIH/solr/db/lib"
})
into packagingDir
}
artifacts {
packaging packagingDir, {
builtBy assemblePackaging
}
}

View File

@ -0,0 +1,95 @@
// This project puts together a "distribution", assembling dependencies from
// various other projects.
plugins {
id 'base'
}
ext {
distDir = file("$buildDir/solr-${version}")
}
configurations {
distSolr {
transitive = false
}
distSolrj
contrib
example
server
}
dependencies {
distSolrj project(":solr:solrj")
[":solr:contrib:analysis-extras",
":solr:contrib:analytics",
":solr:contrib:extraction",
":solr:contrib:clustering",
":solr:contrib:dataimporthandler",
":solr:contrib:dataimporthandler-extras",
":solr:contrib:jaegertracer-configurator",
":solr:contrib:langid",
":solr:contrib:ltr",
":solr:contrib:prometheus-exporter",
":solr:contrib:velocity",
].each { contribName ->
distSolr project(contribName)
contrib project(path: contribName, configuration: "packaging")
}
distSolr project(":solr:core")
distSolr project(":solr:solrj")
distSolr project(":solr:test-framework")
example project(path: ":solr:example", configuration: "packaging")
server project(path: ":solr:server", configuration: "packaging")
}
task toDir(type: Sync) {
from(project(":solr").projectDir, {
include "bin/**"
include "licenses/**"
include "CHANGES.txt"
include "LICENSE.txt"
include "NOTICE.txt"
include "README.txt"
})
from(project(":lucene").projectDir, {
include "CHANGES.txt"
rename { file -> 'LUCENE_CHANGES.txt' }
})
from(configurations.contrib, {
into "contrib"
})
from(configurations.distSolr, {
into "dist"
})
from(configurations.distSolrj - configurations.distSolr, {
into "dist/solrj-lib"
})
from(configurations.example, {
into "example"
})
from(configurations.server, {
into "server"
})
// docs/ - TODO: this is assembled via XSLT... leaving out for now.
into distDir
doLast {
logger.lifecycle "Solr distribution assembled under: ${distDir}"
}
}
assemble.dependsOn toDir

107
solr/server/build.gradle Normal file
View File

@ -0,0 +1,107 @@
apply plugin: 'java-library'
configurations {
api {
exclude group: "org.slf4j"
}
startJar
libExt
webapp
packaging
}
dependencies {
api('org.eclipse.jetty:jetty-alpn-java-server', {
exclude group: "org.eclipse.jetty.alpn", module: "alpn-api"
})
api('io.dropwizard.metrics:metrics-core', {
exclude group: "com.rabbitmq", module: "amqp-client"
})
api('io.dropwizard.metrics:metrics-graphite', {
exclude group: "com.rabbitmq", module: "amqp-client"
})
api 'io.dropwizard.metrics:metrics-jetty9'
api 'io.dropwizard.metrics:metrics-jvm'
api 'io.dropwizard.metrics:metrics-jmx'
api 'org.eclipse.jetty:jetty-continuation'
api 'org.eclipse.jetty:jetty-deploy'
api 'org.eclipse.jetty:jetty-http'
api 'org.eclipse.jetty:jetty-io'
api 'org.eclipse.jetty:jetty-jmx'
api 'org.eclipse.jetty:jetty-rewrite'
api 'org.eclipse.jetty:jetty-security'
api 'org.eclipse.jetty:jetty-server'
api 'org.eclipse.jetty:jetty-servlet'
api 'org.eclipse.jetty:jetty-servlets'
api 'org.eclipse.jetty:jetty-util'
api 'org.eclipse.jetty:jetty-webapp'
api 'org.eclipse.jetty:jetty-xml'
api 'org.eclipse.jetty:jetty-alpn-server'
api 'org.eclipse.jetty.http2:http2-server'
api 'org.eclipse.jetty.http2:http2-common'
api 'org.eclipse.jetty.http2:http2-hpack'
api 'javax.servlet:javax.servlet-api'
libExt 'com.lmax:disruptor'
libExt 'org.slf4j:jcl-over-slf4j'
libExt 'org.slf4j:jul-to-slf4j'
libExt 'org.slf4j:slf4j-api'
libExt 'org.apache.logging.log4j:log4j-1.2-api'
libExt 'org.apache.logging.log4j:log4j-api'
libExt 'org.apache.logging.log4j:log4j-core'
libExt 'org.apache.logging.log4j:log4j-slf4j-impl'
libExt 'org.apache.logging.log4j:log4j-web'
webapp project(path: ":solr:webapp", configuration: "war")
startJar('org.eclipse.jetty:jetty-start::shaded', {
transitive false
})
}
ext {
packagingDir = file("${buildDir}/packaging")
}
task assemblePackaging(type: Sync) {
from(projectDir, {
include "contexts/**"
include "etc/**"
include "modules/**"
include "resources/**"
include "scripts/**"
include "solr/**"
include "README.txt"
})
from(configurations.compileClasspath, {
into "lib/"
})
from(configurations.libExt, {
into "lib/ext"
})
from { project.configurations.startJar.singleFile } {
rename { file -> 'start.jar' }
}
dependsOn configurations.webapp
from( { zipTree(configurations.webapp.asPath) }, {
into "solr-webapp/webapp"
})
into packagingDir
}
artifacts {
packaging packagingDir, {
builtBy assemblePackaging
}
}
assemble.dependsOn assemblePackaging

View File

@ -0,0 +1,328 @@
// TODO 1: the separation of sources between tools and refGuide is awkward; it'd be
// better to separate the refGuideTools as a plain Java module and then depend on
// it as a project dependency. This would enable this module to *not* be a java module at all
// and inherit from base, adding just refGuide-related tasks.
// OR (better) one could rewrite those tools in Groovy (or Kotlin) and use them directly, without
// an additional compilation phase.
// TODO 2: property expansion via ant properties is awkward in gradle. We can do cleaner than going
// through ant -- we could use gradle's expand when copying or at least use some more humane
// property names.
// TODO 3: task names currently roughly correspond to ant tasks. Simpler aliases (such as 'html')
// would be much clearer.
// TODO 4: currently buildscript dependencies are hardcoded (asciidoctor) because they can't be resolved
// using Palantir's plugin. This is another reason to switch to gradle-based tools -- then
// only the build script dependencies would be needed and asciidoctorj would be removed from version
// properties entirely (it is only used locally in this build file).
import java.time.*
import java.time.format.*
import java.nio.file.*
import org.asciidoctor.*
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.asciidoctor:asciidoctorj:1.6.2"
}
}
plugins {
id 'java'
id 'com.github.jruby-gradle.base' version '1.6.0'
}
configurations {
depVer
refGuide
}
dependencies {
// Dependencies to compile internal tools.
implementation('org.asciidoctor:asciidoctorj')
implementation('com.vaadin.external.google:android-json')
implementation('org.jsoup:jsoup')
implementation('org.slf4j:jcl-over-slf4j')
implementation('org.slf4j:slf4j-simple')
implementation('org.apache.logging.log4j:log4j-core')
implementation('com.google.guava:guava')
implementation('commons-codec:commons-codec')
// Dependencies referenced in the guide.
depVer('commons-codec:commons-codec')
depVer('io.dropwizard.metrics:metrics-core')
depVer('org.apache.logging.log4j:log4j-core')
depVer('org.apache.opennlp:opennlp-tools')
depVer('org.apache.tika:tika-core')
depVer('org.apache.velocity.tools:velocity-tools-generic')
depVer('org.apache.zookeeper:zookeeper')
// jekyll dependencies
jrubyExec 'rubygems:jekyll:3.5.2'
jrubyExec 'rubygems:jekyll-asciidoc:3.0.0'
// don't know why we have to explicitly add these deps but it doesn't resolve them
// automatically.
jrubyExec 'rubygems:tilt:2.0.10'
jrubyExec 'rubygems:slim:4.0.1'
jrubyExec 'rubygems:concurrent-ruby:1.0.5'
}
sourceSets {
refGuide {
java {
srcDirs = ['src']
}
}
main {
java {
srcDirs = ['tools']
exclude "**/CustomizedAsciidoctorAntTask.java"
exclude "**/asciidoctor-antlib.xml"
}
}
}
ext {
buildContentDir = file("${buildDir}/content")
mainPage = "index"
solrDocsVersion = "${version}".replaceAll(/^(\d+\.\d+)(|\..*)$/, "\$1")
solrDocsVersionPath = "${solrDocsVersion}".replaceAll(/^(\d+)\.(\d+)$/, "\$1_\$2_0")
if (!project.hasProperty("solrGuideVersion")) {
solrGuideVersion = "${solrDocsVersion}-DRAFT"
}
solrRootPath = '../../../../solr/'
solrGuideDraftStatus = solrGuideVersion.matches(/^\d+\.\d+(|\.\d+)$/) ? "" : "DRAFT"
solrGuideVersionPath = solrGuideVersion.replaceAll(/^(\d+)\.(\d+)(-DRAFT)?.*/, "\$1_\$2\$3")
javadocLink = "https://docs.oracle.com/en/java/javase/11/docs/api/"
if (project.hasProperty("local.javadocs")) {
htmlSolrJavadocs = "link:../../docs/"
htmlLuceneJavadocs = "link:../../../../lucene/build/docs/"
} else {
htmlSolrJavadocs = "https://lucene.apache.org/solr/${solrDocsVersionPath}/"
htmlLuceneJavadocs = "https://lucene.apache.org/core/${solrDocsVersionPath}/"
}
bareBonesDir = file("${buildDir}/bare-bones-html")
def tstamp = ZonedDateTime.now()
buildDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(tstamp)
buildTime = DateTimeFormatter.ofPattern("HH:mm:ss").format(tstamp)
buildYear = DateTimeFormatter.ofPattern("yyyy").format(tstamp)
// Some additional version properties are lazily computed
// in setupProps (because they need to be computed after evalution is complete).
props = [
"solr-root-path" : solrRootPath,
"solr-guide-draft-status": solrGuideDraftStatus,
"solr-guide-version" : solrGuideVersion,
"solr-guide-version-path": solrGuideVersionPath,
"solr-docs-version" : solrDocsVersion,
"javadoc.link" : javadocLink,
"java-javadocs" : javadocLink,
"solr-javadocs" : htmlSolrJavadocs,
"html-solr-javadocs" : htmlSolrJavadocs,
"lucene-javadocs" : htmlLuceneJavadocs,
"html-lucene-javadocs" : htmlLuceneJavadocs,
"build-date" : buildDate,
"DSTAMP" : buildDate,
"build-year" : buildYear,
"current.year" : buildYear
]
asciiDocAttrs = [
'common': [
'attribute-missing' : 'warn',
'section-toc' : '',
'icons' : 'font',
'icon-set' : 'fa',
'figure-caption!' : '',
'idprefix' : '',
'idseparator' : '-',
'source-highlighter': 'coderay',
'solr-root-path' : solrRootPath,
],
'html' : [
'imagesdir': buildContentDir.toString()
]
]
}
// Tasks modeled after ant file until we have a working build.
task setupProps {
doFirst {
// These properties have to be resolved after configuration phase (palantir's constraint)
// so we can't use them as input for caches.
[
["ivyversions./commons-codec/commons-codec", "commons-codec", "commons-codec"],
["ivyversions.io.dropwizard.metrics.version", "io.dropwizard.metrics", "metrics-core"],
["ivyversions.org.apache.logging.log4j.version", "org.apache.logging.log4j", "log4j-core"],
["ivyversions./org.apache.opennlp/opennlp-tools", "org.apache.opennlp", "opennlp-tools"],
["ivyversions.org.apache.tika.version", "org.apache.tika", "tika-core"],
["ivyversions.org.apache.velocity.tools.version", "org.apache.velocity.tools", "velocity-tools-generic"],
["ivyversions./org.apache.zookeeper/zookeeper", "org.apache.zookeeper", "zookeeper"],
["ivy-zookeeper-version", "org.apache.zookeeper", "zookeeper"],
["ivy-log4j-version", "org.apache.logging.log4j", "log4j-core"],
["ivy-tika-version", "org.apache.tika", "tika-core"],
["ivy-opennlp-version", "org.apache.opennlp", "opennlp-tools"],
["ivy-commons-codec-version", "commons-codec", "commons-codec"],
["ivy-velocity-tools-version", "org.apache.velocity.tools", "velocity-tools-generic"],
["ivy-dropwizard-version", "io.dropwizard.metrics", "metrics-core"]
].each { antProp, depGroup, depId ->
props[antProp] = getVersion(depGroup, depId, configurations.depVer)
}
// Emit info about properties for clarity.
logger.warn("Building ref guide with:\n" + props.collect({ k, v -> " ${k} -> ${v}" }).join('\n'))
}
}
task buildInit(type: Sync) {
dependsOn setupProps
def dummyAntProject = new org.apache.tools.ant.Project()
// If replaceable properties change, we have to rerun.
inputs.properties props
from(file("src"), {
exclude '**/*.template'
})
from(file("src"), {
include '**/*.template'
rename '(.+)\\.template', '$1'
filteringCharset = 'UTF-8'
filter(org.apache.tools.ant.filters.ExpandProperties, project: dummyAntProject)
})
doFirst {
props.each { k, v ->
dummyAntProject.setProperty(k, v)
}
}
into buildContentDir
}
task buildNavDataFiles(type: JavaExec) {
dependsOn buildInit, classes
classpath = sourceSets.main.runtimeClasspath
main = 'BuildNavDataFiles'
workingDir = buildContentDir
args([
"${buildContentDir}",
"${mainPage}"
])
doFirst {
// Remove previously generated files first.
[
"scrollnav.json",
"sidebar.json"
].each { name ->
project.delete(file("${buildContentDir}/_data/${name}"))
}
}
}
task bareBonesAsciiDoctor {
dependsOn buildNavDataFiles
doLast {
// Regenerate fully.
project.delete(bareBonesDir)
bareBonesDir.mkdirs()
// Convert each file separately so that folders are preserved.
Path source = buildContentDir.toPath().toAbsolutePath().normalize()
Path target = bareBonesDir.toPath().toAbsolutePath().normalize()
Asciidoctor adoc = Asciidoctor.Factory.create()
fileTree(source, {
include "**/*.adoc"
exclude "**/_*"
}).each { file ->
Path relative = source.relativize(file.toPath())
Path targetDir = target.resolve(relative).getParent()
def opts = OptionsBuilder.options()
.backend('html5')
.docType("book")
.headerFooter(false)
.safe(SafeMode.UNSAFE)
.baseDir(source.toFile())
.toDir(targetDir.toFile())
.destinationDir(targetDir.toFile())
.mkDirs(true)
.attributes(asciiDocAttrs.common + asciiDocAttrs.html + props)
adoc.convertFile(file, opts)
}
}
}
task bareBonesHtmlValidation(type: JavaExec) {
dependsOn bareBonesAsciiDoctor
description("Builds (w/o Jekyll) a very simple html version of the guide and runs link/anchor validation on it")
classpath = sourceSets.main.runtimeClasspath
main = 'CheckLinksAndAnchors'
workingDir = buildContentDir
args([
"${bareBonesDir}",
"-bare-bones"
])
if (project.hasProperty("local.javadocs")) {
args += "-check-all-relative-links"
}
}
task buildSiteJekyll(type: com.github.jrubygradle.JRubyExec) {
dependsOn buildNavDataFiles
inputs.dir buildContentDir
outputs.dir file("${buildDir}/html-site")
script 'jekyll'
scriptArgs 'build' //, '--verbose'
workingDir buildContentDir
}
task buildSite(type: JavaExec) {
group "Documentation"
description "Builds an HTML Site w/Jekyll and verifies the anchors+links are valid"
dependsOn buildSiteJekyll
classpath = sourceSets.main.runtimeClasspath
main = 'CheckLinksAndAnchors'
workingDir = buildContentDir
args([
file("${buildDir}/html-site"),
])
if (project.hasProperty("local.javadocs")) {
args += "-check-all-relative-links"
}
}
check.dependsOn bareBonesHtmlValidation

55
solr/solrj/build.gradle Normal file
View File

@ -0,0 +1,55 @@
apply plugin: 'java-library'
dependencies {
api 'org.slf4j:slf4j-api'
implementation 'org.slf4j:jcl-over-slf4j'
api 'commons-io:commons-io'
api 'org.apache.commons:commons-math3'
api 'org.eclipse.jetty.http2:http2-client'
api 'org.eclipse.jetty.http2:http2-http-client-transport'
api 'org.eclipse.jetty:jetty-util'
api 'org.eclipse.jetty:jetty-http'
api 'org.eclipse.jetty:jetty-alpn-java-client'
api 'org.eclipse.jetty:jetty-alpn-client'
api('org.apache.httpcomponents:httpmime', {
exclude group: "commons-codec", module: "commons-codec"
exclude group: "commons-logging", module: "commons-logging"
})
api 'io.netty:netty-buffer'
api 'io.netty:netty-codec'
api 'io.netty:netty-common'
api 'io.netty:netty-handler'
api 'io.netty:netty-resolver'
api 'io.netty:netty-transport'
api 'io.netty:netty-transport-native-epoll'
api 'io.netty:netty-transport-native-unix-common'
api('org.apache.zookeeper:zookeeper', {
exclude group: "org.apache.yetus", module: "audience-annotations"
exclude group: "io.netty", module: "netty-all"
exclude group: "log4j", module: "log4j"
exclude group: "org.slf4j", module: "slf4j-log4j12"
})
api('org.codehaus.woodstox:woodstox-core-asl', {
exclude group: "javax.xml.stream", module: "stax-api"
})
testImplementation project(':solr:test-framework')
testImplementation 'org.eclipse.jetty:jetty-webapp'
testImplementation 'org.eclipse.jetty:jetty-alpn-java-server'
testImplementation 'org.restlet.jee:org.restlet.ext.servlet'
testImplementation 'org.objenesis:objenesis'
testImplementation('org.mockito:mockito-core', {
exclude group: "net.bytebuddy", module: "byte-buddy-agent"
})
testImplementation("org.apache.logging.log4j:log4j-slf4j-impl", {
exclude group: "org.apache.logging.log4j", module: "log4j-api"
})
testImplementation "org.hsqldb:hsqldb"
}

View File

@ -0,0 +1,15 @@
apply plugin: 'java-library'
dependencies {
api project(':solr:core')
api project(':solr:solrj')
api project(':lucene:test-framework')
api project(':lucene:analysis:common')
api 'org.apache.logging.log4j:log4j-core'
api 'io.opentracing:opentracing-mock'
implementation 'io.dropwizard.metrics:metrics-jetty9'
implementation 'com.lmax:disruptor'
}

37
solr/webapp/build.gradle Normal file
View File

@ -0,0 +1,37 @@
plugins {
id 'java'
id 'war'
}
configurations {
war {}
}
dependencies {
implementation(project(":solr:core"), {
exclude module: "server"
// Exclude additional deps from core and logging deps to sync up with ant.
// This is suspicious that we have to do it though.
exclude group: "org.apache.kerby", module: "kerby-config"
exclude group: "org.apache.kerby", module: "kerby-util"
exclude group: "org.apache.kerby", module: "kerb-crypto"
exclude group: "org.slf4j"
exclude group: "org.apache.logging.log4j"
})
}
war {
// Why are they in the source code at all if they're excluded from the distribution?
exclude "libs/angular-cookies.js"
exclude "libs/angular-route.js"
exclude "libs/angular-sanitize.js"
exclude "libs/angular-utf8-base.js"
exclude "libs/angular.js"
exclude "libs/chosen.jquery.js"
}
// Expose 'war' archive as an artifact so that it can be packaged in the distribution.
artifacts {
war tasks.war
}

230
versions.lock Normal file
View File

@ -0,0 +1,230 @@
# Run ./gradlew --write-locks to regenerate this file
com.adobe.xmp:xmpcore:5.1.3 (1 constraints: 0b050a36)
com.beust:jcommander:1.35 (1 constraints: b50c1901)
com.carrotsearch:hppc:0.8.1 (2 constraints: af0fd8a6)
com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.7.2 (1 constraints: 0d050c36)
com.carrotsearch.thirdparty:simple-xml-safe:2.7.1 (1 constraints: a60a82ca)
com.cybozu.labs:langdetect:1.1-20120112 (1 constraints: 5c066d5e)
com.drewnoakes:metadata-extractor:2.11.0 (1 constraints: 3605323b)
com.epam:parso:2.0.9 (1 constraints: 0d05fe35)
com.fasterxml.jackson.core:jackson-annotations:2.9.9 (2 constraints: 0a1d1637)
com.fasterxml.jackson.core:jackson-core:2.9.9 (3 constraints: 23350c6a)
com.fasterxml.jackson.core:jackson-databind:2.9.9.3 (3 constraints: 741a6389)
com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.9.9 (1 constraints: 16051936)
com.github.ben-manes.caffeine:caffeine:2.8.0 (1 constraints: 0c050d36)
com.github.jnr:jffi:1.2.18 (1 constraints: b20902ab)
com.github.jnr:jnr-constants:0.9.12 (4 constraints: ed2c9d5d)
com.github.jnr:jnr-enxio:0.19 (2 constraints: 2a167d08)
com.github.jnr:jnr-netdb:1.1.6 (1 constraints: 7e0952a1)
com.github.jnr:jnr-posix:3.0.49 (2 constraints: f0161b5b)
com.github.jnr:jnr-unixsocket:0.20 (1 constraints: 4a09d497)
com.github.virtuald:curvesapi:1.04 (1 constraints: d904f330)
com.github.zafarkhaja:java-semver:0.9.0 (1 constraints: 0b050636)
com.google.code.findbugs:jsr305:3.0.2 (1 constraints: 170aecb4)
com.google.errorprone:error_prone_annotations:2.1.3 (1 constraints: 180aebb4)
com.google.guava:guava:25.1-jre (1 constraints: 4a06b047)
com.google.j2objc:j2objc-annotations:1.1 (1 constraints: b609eba0)
com.google.protobuf:protobuf-java:3.7.1 (1 constraints: 0d051036)
com.google.re2j:re2j:1.2 (1 constraints: a7041c2c)
com.googlecode.juniversalchardet:juniversalchardet:1.0.3 (1 constraints: 0605f335)
com.googlecode.mp4parser:isoparser:1.1.22 (1 constraints: 38052d3b)
com.headius:backport9:1.1 (1 constraints: 1a098c8e)
com.headius:invokebinder:1.11 (1 constraints: 4b09d797)
com.headius:modulator:1.0 (1 constraints: 19098b8e)
com.headius:options:1.4 (1 constraints: 1d098f8e)
com.healthmarketscience.jackcess:jackcess:2.1.12 (1 constraints: 3805313b)
com.healthmarketscience.jackcess:jackcess-encrypt:2.1.4 (1 constraints: 0905fc35)
com.ibm.icu:icu4j:62.1 (1 constraints: dd040c31)
com.jayway.jsonpath:json-path:2.4.0 (1 constraints: 08050136)
com.jcraft:jzlib:1.1.3 (1 constraints: 7b094fa1)
com.lmax:disruptor:3.4.2 (1 constraints: 0b050836)
com.martiansoftware:nailgun-server:0.9.1 (1 constraints: 800960a1)
com.pff:java-libpst:0.8.1 (1 constraints: 0b050436)
com.rometools:rome:1.5.1 (1 constraints: 09050036)
com.rometools:rome-utils:1.5.1 (1 constraints: 09050036)
com.sun.mail:gimap:1.5.1 (1 constraints: 09050036)
com.sun.mail:javax.mail:1.5.1 (2 constraints: 830d2844)
com.tdunning:t-digest:3.1 (1 constraints: a804212c)
com.vaadin.external.google:android-json:0.0.20131108.vaadin1 (1 constraints: 34092a9e)
commons-cli:commons-cli:1.2 (1 constraints: a7041c2c)
commons-codec:commons-codec:1.11 (1 constraints: d704f230)
commons-collections:commons-collections:3.2.2 (1 constraints: 09050236)
commons-fileupload:commons-fileupload:1.3.3 (1 constraints: 0905fc35)
commons-io:commons-io:2.5 (2 constraints: be142680)
commons-logging:commons-logging:1.2 (2 constraints: c8149e7f)
de.l3s.boilerpipe:boilerpipe:1.1.0 (1 constraints: 0405f335)
io.dropwizard.metrics:metrics-core:4.0.5 (5 constraints: 204326bf)
io.dropwizard.metrics:metrics-graphite:4.0.5 (1 constraints: 0b050436)
io.dropwizard.metrics:metrics-jetty9:4.0.5 (1 constraints: 0b050436)
io.dropwizard.metrics:metrics-jmx:4.0.5 (1 constraints: 0b050436)
io.dropwizard.metrics:metrics-jvm:4.0.5 (1 constraints: 0b050436)
io.jaegertracing:jaeger-core:0.35.5 (1 constraints: 970d1034)
io.jaegertracing:jaeger-thrift:0.35.5 (1 constraints: 3f053f3b)
io.netty:netty-buffer:4.1.29.Final (4 constraints: 5b3421e8)
io.netty:netty-codec:4.1.29.Final (2 constraints: fc135782)
io.netty:netty-common:4.1.29.Final (5 constraints: 88482df2)
io.netty:netty-handler:4.1.29.Final (1 constraints: 5a076061)
io.netty:netty-resolver:4.1.29.Final (2 constraints: 0b15d4b5)
io.netty:netty-transport:4.1.29.Final (5 constraints: 7847682a)
io.netty:netty-transport-native-epoll:4.1.29.Final (1 constraints: 5a076061)
io.netty:netty-transport-native-unix-common:4.1.29.Final (2 constraints: 081ace05)
io.opentracing:opentracing-api:0.33.0 (5 constraints: 4c3c8052)
io.opentracing:opentracing-mock:0.33.0 (1 constraints: 3805343b)
io.opentracing:opentracing-noop:0.33.0 (3 constraints: 7c2142bd)
io.opentracing:opentracing-util:0.33.0 (3 constraints: f61f583b)
io.prometheus:simpleclient:0.2.0 (3 constraints: fe242db8)
io.prometheus:simpleclient_common:0.2.0 (2 constraints: e8159ecb)
io.prometheus:simpleclient_httpserver:0.2.0 (1 constraints: 0405f135)
io.sgr:s2-geometry-library-java:1.0.0 (1 constraints: 0305f035)
javax.activation:activation:1.1.1 (3 constraints: 1017445c)
javax.servlet:javax.servlet-api:3.1.0 (3 constraints: 75209943)
joda-time:joda-time:2.9.9 (1 constraints: 8a0972a1)
junit:junit:4.12 (2 constraints: 3e1e6104)
net.arnx:jsonic:1.2.7 (2 constraints: db10d4d1)
net.hydromatic:eigenbase-properties:1.1.5 (1 constraints: 0905f835)
net.sourceforge.argparse4j:argparse4j:0.8.1 (1 constraints: 0b050436)
net.sourceforge.nekohtml:nekohtml:1.9.17 (1 constraints: 4405503b)
net.thisptr:jackson-jq:0.0.8 (1 constraints: 0a05f335)
org.antlr:antlr4-runtime:4.5.1-1 (1 constraints: 6a05b240)
org.apache.calcite:calcite-core:1.18.0 (1 constraints: 3c05413b)
org.apache.calcite:calcite-linq4j:1.18.0 (1 constraints: 3c05413b)
org.apache.calcite.avatica:avatica-core:1.13.0 (1 constraints: 3705323b)
org.apache.commons:commons-collections4:4.2 (1 constraints: aa04252c)
org.apache.commons:commons-compress:1.18 (1 constraints: de04f930)
org.apache.commons:commons-configuration2:2.1.1 (1 constraints: 0605f935)
org.apache.commons:commons-exec:1.3 (1 constraints: a8041d2c)
org.apache.commons:commons-lang3:3.8.1 (7 constraints: 33673f05)
org.apache.commons:commons-math3:3.6.1 (1 constraints: 0c050d36)
org.apache.commons:commons-text:1.6 (1 constraints: ab04202c)
org.apache.curator:curator-client:2.13.0 (1 constraints: 3805383b)
org.apache.curator:curator-framework:2.13.0 (1 constraints: 3805383b)
org.apache.curator:curator-recipes:2.13.0 (1 constraints: 3805383b)
org.apache.hadoop:hadoop-annotations:3.2.0 (1 constraints: 07050036)
org.apache.hadoop:hadoop-auth:3.2.0 (1 constraints: 07050036)
org.apache.hadoop:hadoop-common:3.2.0 (1 constraints: 07050036)
org.apache.hadoop:hadoop-hdfs-client:3.2.0 (1 constraints: 07050036)
org.apache.htrace:htrace-core4:4.1.0-incubating (1 constraints: 58090086)
org.apache.httpcomponents:httpclient:4.5.6 (2 constraints: 6514987d)
org.apache.httpcomponents:httpcore:4.4.10 (2 constraints: 9015d5cd)
org.apache.httpcomponents:httpmime:4.5.6 (1 constraints: 11051436)
org.apache.james:apache-mime4j-core:0.8.2 (1 constraints: 0c050536)
org.apache.james:apache-mime4j-dom:0.8.2 (1 constraints: 0c050536)
org.apache.kerby:kerb-core:1.0.1 (3 constraints: f11c583a)
org.apache.kerby:kerb-crypto:1.0.1 (1 constraints: 860b05e6)
org.apache.kerby:kerb-util:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerby-asn1:1.0.1 (2 constraints: 001155df)
org.apache.kerby:kerby-config:1.0.1 (1 constraints: 860b05e6)
org.apache.kerby:kerby-pkix:1.0.1 (2 constraints: 741065ca)
org.apache.kerby:kerby-util:1.0.1 (2 constraints: 6518bdb6)
org.apache.logging.log4j:log4j-api:2.11.2 (3 constraints: c124e473)
org.apache.logging.log4j:log4j-core:2.11.2 (2 constraints: 09164024)
org.apache.logging.log4j:log4j-slf4j-impl:2.11.2 (1 constraints: 3805343b)
org.apache.opennlp:opennlp-tools:1.9.1 (1 constraints: 0d050c36)
org.apache.pdfbox:fontbox:2.0.12 (1 constraints: 37052d3b)
org.apache.pdfbox:jempbox:1.8.16 (1 constraints: 42054b3b)
org.apache.pdfbox:pdfbox:2.0.12 (1 constraints: 37052d3b)
org.apache.pdfbox:pdfbox-tools:2.0.12 (1 constraints: 37052d3b)
org.apache.poi:poi:4.0.0 (1 constraints: 0605ff35)
org.apache.poi:poi-ooxml:4.0.0 (1 constraints: 0605ff35)
org.apache.poi:poi-ooxml-schemas:4.0.0 (1 constraints: 0605ff35)
org.apache.poi:poi-scratchpad:4.0.0 (1 constraints: 0605ff35)
org.apache.thrift:libthrift:0.12.0 (1 constraints: 8d0dfa33)
org.apache.tika:tika-core:1.19.1 (1 constraints: 3e05453b)
org.apache.tika:tika-java7:1.19.1 (1 constraints: 3e05453b)
org.apache.tika:tika-parsers:1.19.1 (1 constraints: 3e05453b)
org.apache.tika:tika-xmp:1.19.1 (1 constraints: 3e05453b)
org.apache.velocity:velocity-engine-core:2.0 (3 constraints: 973bcd79)
org.apache.velocity.tools:velocity-tools-generic:3.0 (1 constraints: 00136415)
org.apache.velocity.tools:velocity-tools-view:3.0 (1 constraints: 7a14126a)
org.apache.velocity.tools:velocity-tools-view-jsp:3.0 (1 constraints: a704202c)
org.apache.xmlbeans:xmlbeans:3.0.1 (1 constraints: 0605fb35)
org.apache.zookeeper:zookeeper:3.5.5 (1 constraints: 0f050e36)
org.apache.zookeeper:zookeeper-jute:3.5.5 (1 constraints: 8d0d3928)
org.asciidoctor:asciidoctorj:1.6.2 (1 constraints: 0b050436)
org.asciidoctor:asciidoctorj-api:1.6.2 (1 constraints: e30cfb0d)
org.aspectj:aspectjrt:1.8.0 (1 constraints: 0b050836)
org.bitbucket.b_c:jose4j:0.6.5 (1 constraints: 0d050236)
org.bouncycastle:bcmail-jdk15on:1.60 (1 constraints: db04fb30)
org.bouncycastle:bcpkix-jdk15on:1.60 (1 constraints: db04fb30)
org.bouncycastle:bcprov-jdk15on:1.60 (1 constraints: db04fb30)
org.brotli:dec:0.1.2 (1 constraints: 0505f035)
org.carrot2:carrot2-mini:3.16.2 (1 constraints: 3e05493b)
org.carrot2:morfologik-fsa:2.1.5 (1 constraints: d70d9836)
org.carrot2:morfologik-polish:2.1.5 (1 constraints: 0a05fd35)
org.carrot2:morfologik-stemming:2.1.5 (2 constraints: 0b12640c)
org.carrot2.attributes:attributes-binder:1.3.3 (1 constraints: a30a73ca)
org.carrot2.shaded:carrot2-guava:18.0 (2 constraints: b31b3b7b)
org.ccil.cowan.tagsoup:tagsoup:1.2.1 (1 constraints: 0605f735)
org.checkerframework:checker-qual:2.0.0 (1 constraints: 140ae5b4)
org.codehaus.janino:commons-compiler:3.0.9 (2 constraints: d910f7d1)
org.codehaus.janino:janino:3.0.9 (1 constraints: 0e050336)
org.codehaus.mojo:animal-sniffer-annotations:1.14 (1 constraints: ea09d5aa)
org.codehaus.woodstox:stax2-api:3.1.4 (2 constraints: 241635f1)
org.codehaus.woodstox:woodstox-core-asl:4.4.1 (1 constraints: 0b050c36)
org.eclipse.jetty:jetty-alpn-client:9.4.19.v20190610 (3 constraints: d12c8400)
org.eclipse.jetty:jetty-alpn-java-client:9.4.19.v20190610 (1 constraints: 8007517d)
org.eclipse.jetty:jetty-alpn-java-server:9.4.19.v20190610 (1 constraints: 8007517d)
org.eclipse.jetty:jetty-alpn-server:9.4.19.v20190610 (2 constraints: 231beedd)
org.eclipse.jetty:jetty-client:9.4.19.v20190610 (1 constraints: ce1741ae)
org.eclipse.jetty:jetty-continuation:9.4.19.v20190610 (2 constraints: 5d186efb)
org.eclipse.jetty:jetty-deploy:9.4.19.v20190610 (1 constraints: 8007517d)
org.eclipse.jetty:jetty-http:9.4.19.v20190610 (5 constraints: 8b497e4f)
org.eclipse.jetty:jetty-io:9.4.19.v20190610 (8 constraints: 0f7eb132)
org.eclipse.jetty:jetty-jmx:9.4.19.v20190610 (1 constraints: 8007517d)
org.eclipse.jetty:jetty-rewrite:9.4.19.v20190610 (1 constraints: 8007517d)
org.eclipse.jetty:jetty-security:9.4.19.v20190610 (2 constraints: ea172ade)
org.eclipse.jetty:jetty-server:9.4.19.v20190610 (6 constraints: bd5e38f5)
org.eclipse.jetty:jetty-servlet:9.4.19.v20190610 (2 constraints: 641789bf)
org.eclipse.jetty:jetty-servlets:9.4.19.v20190610 (1 constraints: 8007517d)
org.eclipse.jetty:jetty-util:9.4.19.v20190610 (7 constraints: 77648009)
org.eclipse.jetty:jetty-webapp:9.4.19.v20190610 (2 constraints: 72178fc0)
org.eclipse.jetty:jetty-xml:9.4.19.v20190610 (3 constraints: 56274720)
org.eclipse.jetty.alpn:alpn-api:1.1.3.v20160715 (1 constraints: 6513848a)
org.eclipse.jetty.http2:http2-client:9.4.19.v20190610 (2 constraints: 4d1ff83f)
org.eclipse.jetty.http2:http2-common:9.4.19.v20190610 (3 constraints: 242bc31f)
org.eclipse.jetty.http2:http2-hpack:9.4.19.v20190610 (2 constraints: 50198f5c)
org.eclipse.jetty.http2:http2-http-client-transport:9.4.19.v20190610 (1 constraints: 8007517d)
org.eclipse.jetty.http2:http2-server:9.4.19.v20190610 (1 constraints: 8007517d)
org.gagravarr:vorbis-java-core:0.8 (1 constraints: ac041f2c)
org.gagravarr:vorbis-java-tika:0.8 (1 constraints: ac041f2c)
org.hamcrest:hamcrest-core:1.3 (2 constraints: 730ad9bf)
org.jdom:jdom2:2.0.6 (1 constraints: 0a05fb35)
org.jruby:dirgra:0.3 (1 constraints: 1b098b8e)
org.jruby:jruby:9.2.6.0 (1 constraints: 490d7d28)
org.jruby:jruby-core:9.2.6.0 (1 constraints: 0f08b57d)
org.jruby:jruby-stdlib:9.2.6.0 (1 constraints: 0f08b57d)
org.jruby.jcodings:jcodings:1.0.41 (2 constraints: e3124361)
org.jruby.joni:joni:2.1.25 (1 constraints: b00903ab)
org.jsoup:jsoup:1.11.3 (1 constraints: 38052f3b)
org.locationtech.spatial4j:spatial4j:0.7 (1 constraints: ab041e2c)
org.ow2.asm:asm:5.1 (1 constraints: aa04272c)
org.ow2.asm:asm-commons:5.1 (1 constraints: aa04272c)
org.restlet.jee:org.restlet:2.3.0 (2 constraints: e3159ee6)
org.restlet.jee:org.restlet.ext.servlet:2.3.0 (1 constraints: 0705fe35)
org.rrd4j:rrd4j:3.5 (1 constraints: ac04252c)
org.slf4j:jcl-over-slf4j:1.7.25 (1 constraints: 4005473b)
org.slf4j:slf4j-api:1.7.25 (19 constraints: aaff8c21)
org.slf4j:slf4j-simple:1.7.25 (1 constraints: 4005473b)
org.tallison:jmatio:1.5 (1 constraints: aa041f2c)
org.tukaani:xz:1.8 (1 constraints: ad04222c)
ua.net.nlp:morfologik-ukrainian-search:3.9.0 (1 constraints: 0e051536)
xerces:xercesImpl:2.9.1 (2 constraints: f613d869)
[Test dependencies]
com.sun.jersey:jersey-servlet:1.19.4 (1 constraints: 4105483b)
net.bytebuddy:byte-buddy:1.9.3 (2 constraints: 2510faaf)
org.apache.derby:derby:10.9.1.0 (1 constraints: 9b054946)
org.apache.hadoop:hadoop-hdfs:3.2.0 (1 constraints: 07050036)
org.apache.hadoop:hadoop-minikdc:3.2.0 (1 constraints: 07050036)
org.apache.kerby:kerb-admin:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerb-client:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerb-common:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerb-identity:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerb-server:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerb-simplekdc:1.0.1 (1 constraints: 0405f135)
org.apache.kerby:kerby-kdc:1.0.1 (1 constraints: 0405f135)
org.hsqldb:hsqldb:2.4.0 (1 constraints: 08050136)
org.locationtech.jts:jts-core:1.15.0 (1 constraints: 3905383b)
org.mockito:mockito-core:2.23.4 (1 constraints: 3d05403b)
org.objenesis:objenesis:2.6 (2 constraints: 5f0ffb79)
org.slf4j:log4j-over-slf4j:1.7.25 (1 constraints: 4005473b)

111
versions.props Normal file
View File

@ -0,0 +1,111 @@
com.adobe.xmp:xmpcore=5.1.3
com.carrotsearch.randomizedtesting:*=2.7.2
com.carrotsearch:hppc=0.8.1
com.cybozu.labs:langdetect=1.1-20120112
com.drewnoakes:metadata-extractor=2.11.0
com.epam:parso=2.0.9
com.fasterxml.jackson*:*=2.9.9
com.fasterxml.woodstox:*=4.4.1
com.github.ben-manes.caffeine:caffeine=2.8.0
com.github.virtuald:curvesapi=1.04
com.github.zafarkhaja:java-semver=0.9.0
com.google.guava:guava=25.1-jre
com.google.protobuf:protobuf-java=3.7.1
com.google.re2j:re2j=1.2
com.googlecode.juniversalchardet:juniversalchardet=1.0.3
com.googlecode.mp4parser:isoparser=1.1.22
com.healthmarketscience.jackcess:jackcess-encrypt=2.1.4
com.healthmarketscience.jackcess:jackcess=2.1.12
com.ibm.icu:icu4j=62.1
com.jayway.jsonpath:json-path=2.4.0
com.lmax:disruptor=3.4.2
com.pff:java-libpst=0.8.1
com.rometools:*=1.5.1
com.sun.jersey:*=1.19
com.sun.jersey:jersey-json=1.19.4
com.sun.mail:*=1.5.1
com.tdunning:t-digest=3.1
com.vaadin.external.google:android-json=0.0.20131108.vaadin1
commons-beanutils:commons-beanutils=1.9.3
commons-cli:commons-cli=1.2
commons-codec:commons-codec=1.11
commons-collections:commons-collections=3.2.2
commons-fileupload:commons-fileupload=1.3.3
commons-io:commons-io=2.5
commons-logging:commons-logging=1.1.3
de.l3s.boilerpipe:boilerpipe=1.1.0
info.ganglia.gmetric4j:gmetric4j=1.0.7
io.dropwizard.metrics:*=4.0.5
io.netty:*=4.1.29.Final
io.opentracing:*=0.33.0
io.prometheus:*=0.2.0
io.sgr:s2-geometry-library-java=1.0.0
javax.activation:activation=1.1.1
javax.servlet:javax.servlet-api=3.1.0
junit:junit=4.12
net.arnx:jsonic=1.2.7
net.bytebuddy:byte-buddy=1.9.3
net.hydromatic:eigenbase-properties=1.1.5
net.sourceforge.argparse4j:argparse4j=0.8.1
net.sourceforge.nekohtml:nekohtml=1.9.17
net.thisptr:jackson-jq=0.0.8
org.antlr:antlr4-runtime=4.5.1-1
org.apache.calcite.avatica:avatica-core=1.13.0
org.apache.calcite:*=1.18.0
org.apache.commons:commons-collections4:4.2
org.apache.commons:commons-compress=1.18
org.apache.commons:commons-configuration2=2.1.1
org.apache.commons:commons-exec=1.3
org.apache.commons:commons-lang3=3.6
org.apache.commons:commons-math3=3.6.1
org.apache.commons:commons-text=1.6
org.apache.curator:*=2.13.0
org.apache.derby:derby=10.9.1.0
org.apache.hadoop:*=3.2.0
org.apache.htrace:htrace-core4=4.1.0-incubating
org.apache.httpcomponents:httpclient=4.5.6
org.apache.httpcomponents:httpcore=4.4.10
org.apache.httpcomponents:httpmime=4.5.6
org.apache.james:*=0.8.2
org.apache.kerby:*=1.0.1
org.apache.logging.log4j:*=2.11.2
org.apache.opennlp:opennlp-tools=1.9.1
org.apache.pdfbox:*=2.0.12
org.apache.pdfbox:jbig2-imageio=3.0.2
org.apache.pdfbox:jempbox=1.8.16
org.apache.poi:*=4.0.0
org.apache.tika:*=1.19.1
org.apache.velocity.tools:*=3.0
org.apache.xmlbeans:xmlbeans=3.0.1
org.apache.zookeeper:*=3.5.5
org.asciidoctor:asciidoctorj=1.6.2
org.aspectj:aspectjrt=1.8.0
org.bitbucket.b_c:jose4j=0.6.5
org.bouncycastle:*=1.60
org.brotli:dec=0.1.2
org.carrot2:carrot2-mini=3.16.2
org.carrot2:morfologik-*=2.1.5
org.ccil.cowan.tagsoup:tagsoup=1.2.1
org.codehaus.janino:*=3.0.9
org.codehaus.woodstox:stax2-api=3.1.4
org.codehaus.woodstox:woodstox-core-asl=4.4.1
org.eclipse.jetty.http2:*=9.4.19.v20190610
org.eclipse.jetty:*=9.4.19.v20190610
org.gagravarr:*=0.8
org.hamcrest:*=1.3
org.hsqldb:hsqldb=2.4.0
org.jdom:jdom2=2.0.6
org.jsoup:jsoup=1.11.3
org.locationtech.jts:jts-core=1.15.0
org.locationtech.spatial4j:*=0.7
org.mockito:mockito-core=2.23.4
org.objenesis:objenesis=2.6
org.ow2.asm:*=5.1
org.restlet.jee:*=2.3.0
org.rrd4j:rrd4j=3.5
org.slf4j:*=1.7.24
org.tallison:jmatio=1.5
org.tukaani:xz=1.8
ua.net.nlp:morfologik-ukrainian-search=3.9.0
xerces:xercesImpl=2.9.1
io.jaegertracing:*=0.35.5