This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new d6c8095371e New gradle runDev alternative to "dev" (#3816)
d6c8095371e is described below
commit d6c8095371ed571545ca9a566a237a2a695cfbab
Author: David Smiley <[email protected]>
AuthorDate: Fri Nov 7 17:40:15 2025 -0500
New gradle runDev alternative to "dev" (#3816)
---
dev-docs/gradle-help/workflow.txt | 11 +++++++----
gradle/help.gradle | 2 +-
solr/packaging/build.gradle | 33 +++++++++++++++++++++++++++++++++
3 files changed, 41 insertions(+), 5 deletions(-)
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()}",