diff --git a/dev-docs/gradle-help/workflow.txt b/dev-docs/gradle-help/workflow.txt index a50063334ab..47cde864f53 100644 --- a/dev-docs/gradle-help/workflow.txt +++ b/dev-docs/gradle-help/workflow.txt @@ -31,15 +31,18 @@ Put together a local Solr binary "distribution" folder: gradlew -p solr/packaging assemble ls solr/packaging/build/solr-* # expanded directory -For quick local development -gradlew -p solr/packaging dev -ls solr/packaging/build/dev # expanded directory +Build & run Solr directly from Gradle, skipping "bin/solr", retaining data between runs: +gradlew -p solr/packaging runDev + +Build & run Solr, retaining data between runs: +gradlew -p solr/packaging devSlim +(cd solr/packaging/build/dev-slim && bin/solr start -f) Generate the release tar archive (see publishing.txt for details) gradlew -p solr/distribution assembleRelease ls solr/distribution/build/release # release archives -Build a docker image from the local repository (see docker/gradle-help.txt for more) +Build & run a docker image from the local repository (see docker/gradle-help.txt for more) gradlew dockerBuild dockerTag docker run --rm -p 8983:8983 apache/solr:9.0.0-SNAPSHOT diff --git a/gradle/help.gradle b/gradle/help.gradle index f17b4067efb..3e3e5f957d8 100644 --- a/gradle/help.gradle +++ b/gradle/help.gradle @@ -46,7 +46,7 @@ configure(rootProject) { doLast { println "" println "This is the Solr gradle build. See some guidelines, " - println "ant-equivalent commands, etc. under help/*; or type:" + println "ant-equivalent commands, etc. under dev-docs/gradle-help/*; or type:" println "" helpFiles.each { section, path, sectionInfo -> println String.format(Locale.ROOT, diff --git a/solr/packaging/build.gradle b/solr/packaging/build.gradle index feab0004d4a..33fd9197bb3 100644 --- a/solr/packaging/build.gradle +++ b/solr/packaging/build.gradle @@ -215,6 +215,39 @@ artifacts { solrSlimTgz(slimDistTar) } +tasks.register('runDev', JavaExec) { + group = 'application' + description = 'Starts Solr for local experimentation. Does NOT use the bin/solr script.' + dependsOn 'devSlim' + + workingDir = file("$slimDevDir/server") + + // Intentionally not synchronizing the logic here with bin/solr; don't want the burden + + doFirst { + println "To attach a debugger, at the CLI pass: --debug-jvm" + println "To pass JVM args, at the CLI pass: -PjvmArgs='--add-modules jdk.incubator.vector'" + println "To pass system properties, at the CLI pass: -Dsolr.port.listen=8983" + } + + maxHeapSize = project.findProperty('maxHeapSize') ?: '1G' + + jvmArgs = [] // don't use defaults from our build that assume this is a typical build task + jvmArgs((project.findProperty('jvmArgs') ?: '').split()) + + systemProperty 'solr.port.listen', '8983' + systemProperty 'solr.install.dir', file("$workingDir/..") + systemProperty 'solr.logs.dir', file("$workingDir/logs") + systemProperty 'solr.zookeeper.server.enabled', 'true' // SolrCloud; embedded ZK + + // Propagate CLI system properties (override defaults above) + systemProperties += gradle.startParameter.systemPropertiesArgs + + classpath = files("$workingDir/start.jar") + + args((project.findProperty('args') ?: '--module=http').split()) +} + task downloadBats(type: NpmTask) { group = 'Build Dependency Download' args = ["install", "https://github.com/bats-core/bats-core#v${libs.versions.bats.core.get()}",