I propose to improve the message on an exception already thrown. On Tue, May 16, 2023 at 11:04 PM Ishan Chattopadhyaya < ichattopadhy...@gmail.com> wrote:
> You propose to throw an exception containing this, right? > > > Java does not throw SecurityException if this > is the case, it just ignores the jar! > > Are you serious? > > On Wed, 17 May, 2023, 8:02 am Gus Heck, <gus.h...@gmail.com> wrote: > >> Blaming? >> >> On Tue, May 16, 2023 at 10:05 PM Ishan Chattopadhyaya < >> ichattopadhy...@gmail.com> wrote: >> >>> > Having that explicitly called out would have been SUPER helpful. >>> >>> Blaming Java in an exception thrown by Lucene is a ridiculous idea. >>> >>> On Wed, 17 May, 2023, 3:33 am Gus Heck, <gus.h...@gmail.com> wrote: >>> >>>> Found it. >>>> >>>> It's a solr thing made worse by the interaction of lucene testutils and >>>> jdk.internal.loader.URLClassPath's decision to hide anything gone wrong >>>> when checking a URL >>>> /* >>>> * Checks whether the resource URL should be returned. >>>> * Returns null on security check failure. >>>> * Called by java.net.URLClassLoader. >>>> */ >>>> public static URL checkURL(URL url) { >>>> if (url != null) { >>>> try { >>>> check(url); >>>> } catch (Exception e) { >>>> return null; >>>> } >>>> } >>>> return url; >>>> } >>>> >>>> Yay. Fun. JDK classes swallowing exceptions silently. >>>> >>>> At the start of this it only took me a little while to discover that >>>> there >>>> was a security manager in play via debugging. Remembering that I saw >>>> emails >>>> about that, I went to jira, found the ticket enabling it by default in >>>> 9.x >>>> and eventually tracked down the name of the security policy file by >>>> reading >>>> solr.in.sh and /bin/solr... The key issue that tripped me up is that >>>> the >>>> tests have a *separate* security policy file, and there was pretty much >>>> no >>>> way to know this without extensive reading of the build. Thus I got >>>> thrown >>>> off track when >>>> >>>> permission java.io.FilePermission >>>> "${user.home}${/}.m2${/}repository${/}-", "read"; >>>> >>>> To solr/server/etc/security.policy had no effect. That and the fact >>>> that >>>> no security exception was reported, led me to start chasing increasingly >>>> improbable hypotheses. Many hours later when I went back to debugging >>>> deeply into class loading, I found that the code was actually reading >>>> the >>>> jar files in question, and then I finally caught it throwing a security >>>> exception during my debugging. >>>> >>>> It turns out that adding the above permission to >>>> gradle/testing/randomization/policies/solr-tests.policy allows the test >>>> to >>>> pass. [1] >>>> >>>> I think we need to document this somewhere (or someone needs to point >>>> me to >>>> the doc I missed, FWIW I hit this basically following the process in >>>> dev-docs/dependency-upgrades.adoc treating lucene like a dependency, and >>>> unaware that there is a "shortcut" mode for lucene specifically in >>>> gradle/lucene-dev/lucene-dev-repo-composite.gradle and I find reading >>>> that >>>> file none-to clear anyway) >>>> >>>> That's the solr part, the lucene part is that the security exception is >>>> hit >>>> when in org.apache.lucene.codecs.Codec$Holder.<clinit>(Codec.java:58) >>>> when org.apache.lucene.tests.util.TestRuleSetupAndRestoreClassEnv#before >>>> does >>>> >>>> savedCodec = Codec.getDefault(); >>>> >>>> The error message "An SPI class of type org.apache.lucene.codecs.Codec >>>> with >>>> name 'Lucene95' does not exist." was moderately misleading because the >>>> file >>>> and the services files in the jar definitely did exist. This message >>>> should >>>> vary if there is an installed security manager, maybe saying something >>>> like: >>>> >>>> "An SPI class of type org.apache.lucene.codecs.Codec with name >>>> 'Lucene95' >>>> does not exist. We have detected that a security manager is installed >>>> so it >>>> is also possible that the jar containing the codec is inaccessible under >>>> the current security policy. (Java does not throw SecurityException if >>>> this >>>> is the case, it just ignores the jar!)" [2] >>>> >>>> Having that explicitly called out would have been SUPER helpful. >>>> >>>> -Gus >>>> >>>> [1]: https://issues.apache.org/jira/browse/SOLR-16804 >>>> [2]: https://github.com/apache/lucene/issues/12300 >>>> >>>> >>>> On Mon, May 15, 2023 at 3:17 PM Michael Sokolov <msoko...@gmail.com> >>>> wrote: >>>> >>>> > random guess - does it have something to do with modules? >>>> > >>>> > On Mon, May 15, 2023 at 11:14 AM Gus Heck <gus.h...@gmail.com> wrote: >>>> > > >>>> > > I hadn't seen that one. Thanks, I'll look at it. It already looks a >>>> bit >>>> > confusing though since it seems to have options for pointing to a >>>> repo, but >>>> > I appear to be pulling the jars successfully from .m2/repository >>>> already... >>>> > (except then they don't work, so successful means I see them in the >>>> > classpath of the relevant classloader). And if we can't deploy a >>>> valid jar >>>> > to mavenLocal for some reason (tweaked the solr build so it sees >>>> > mavenLocal()), (or solr can't consume such a jar) that seems like an >>>> issue >>>> > for whichever one is breaking that. >>>> > > >>>> > > Debugging: The JDK appears to be attempting to load the services >>>> file >>>> > from modules, but not seeing the lucene module. (just the jdk ones) >>>> Also it >>>> > passes through a block that says: >>>> > > >>>> > > // not in a package of a module defined to this loader >>>> > > for (URL url : findMiscResource(name)) { >>>> > > >>>> > > (but then iterates >>>> > jdk.internal.loader.BuiltinClassLoader#nameToModule.values() to load >>>> things >>>> > anyway) >>>> > > >>>> > > -Gus >>>> > > >>>> > > On Mon, May 15, 2023 at 10:54 AM Houston Putman < >>>> houstonput...@gmail.com> >>>> > wrote: >>>> > >> >>>> > >> Gus, I haven't done this myself, but are you using the instructions >>>> > provided in Solr's >>>> "gradle/lucene-dev/lucene-dev-repo-composite.gradle"? >>>> > >> >>>> > >> It looks like you need to specify the development lucene version >>>> > differently than other dependencies... >>>> > >> >>>> > >> - Houston >>>> > >> >>>> > >> On Sat, May 13, 2023 at 10:14 AM Michael Sokolov < >>>> msoko...@gmail.com> >>>> > wrote: >>>> > >>> >>>> > >>> doh I actually read your email and you said you already checked >>>> that - >>>> > >>> I'm going to send out one of those "sokolov would like to retract >>>> the >>>> > >>> previous email" emails. Does GMail even pretend to do that? I >>>> don't >>>> > >>> know what's going on there! sorry >>>> > >>> >>>> > >>> On Sat, May 13, 2023 at 10:13 AM Michael Sokolov < >>>> msoko...@gmail.com> >>>> > wrote: >>>> > >>> > >>>> > >>> > sorry - META-INF not WEB-INF >>>> > >>> > >>>> > >>> > On Sat, May 13, 2023 at 10:12 AM Michael Sokolov < >>>> msoko...@gmail.com> >>>> > wrote: >>>> > >>> > > >>>> > >>> > > You are probably missing the contents of WEB-INF in your >>>> custom >>>> > jar? >>>> > >>> > > Roughly speaking the files in there define run-time-bound >>>> > "services" >>>> > >>> > > that are looked up by name by the JDK's service-loader API. >>>> > >>> > > >>>> > >>> > > On Sat, May 13, 2023 at 9:33 AM Gus Heck <gus.h...@gmail.com> >>>> > wrote: >>>> > >>> > > > >>>> > >>> > > > Cross posting to lucene on the possibility that folks here >>>> are >>>> > more likely to add customized lucene to Solr and recognize what I'm >>>> > stumbling on? (zero responses on solr list) >>>> > >>> > > > >>>> > >>> > > > Note that the specific test that I happened to copy is not >>>> the >>>> > issue, all tests are doing this (or at least so many tests are >>>> failing I >>>> > can't see the ones that are passing easily). >>>> > >>> > > > >>>> > >>> > > > ---------- Forwarded message --------- >>>> > >>> > > > From: Gus Heck <gus.h...@gmail.com> >>>> > >>> > > > Date: Wed, May 10, 2023 at 6:50 PM >>>> > >>> > > > Subject: Running 10.0 build with a custom lucene 9.5 >>>> > >>> > > > To: <d...@solr.apache.org> >>>> > >>> > > > >>>> > >>> > > > >>>> > >>> > > > Lucene: >>>> > >>> > > > >>>> > >>> > > > I made a tweak to lucene for something I'm investigating, >>>> gave >>>> > it a new version, deployed to mavenLocal() >>>> > >>> > > > I have verified that the jars are built with correct >>>> > META-INF/services files >>>> > >>> > > > >>>> > >>> > > > Solr: >>>> > >>> > > > >>>> > >>> > > > I added mavenLocal() in gradle/globals.gradle >>>> > >>> > > > I removed the license file sha1 sigs for the default lucene >>>> & >>>> > creates signatures for my test version >>>> > >>> > > > I updated versions.props >>>> > >>> > > > I updated versions.lock >>>> > >>> > > > >>>> > >>> > > > Now when I run individual solr tests via my ide they seem to >>>> > pass, but virtually every test run via gradle fails with something >>>> like: >>>> > >>> > > > >>>> > >>> > > > org.apache.solr.embedded.TestJettySolrRunner > classMethod >>>> FAILED >>>> > >>> > > > java.lang.ExceptionInInitializerError >>>> > >>> > > > at >>>> > org.apache.lucene.codecs.Codec.getDefault(Codec.java:141) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleSetupAndRestoreClassEnv.before(TestRuleSetupAndRestoreClassEnv.java:137) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:42) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:38) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:53) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:47) >>>> > >>> > > > at >>>> org.junit.rules.RunRules.evaluate(RunRules.java:20) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:390) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.ThreadLeakControl.lambda$forkTimeoutingTask$0(ThreadLeakControl.java:850) >>>> > >>> > > > at java.base/java.lang.Thread.run(Thread.java:829) >>>> > >>> > > > >>>> > >>> > > > Caused by: >>>> > >>> > > > java.lang.IllegalArgumentException: An SPI class of >>>> type >>>> > org.apache.lucene.codecs.Codec with name 'Lucene95' does not exist. >>>> You >>>> > need to add the corresponding JAR file supporting this SPI to your >>>> > classpath. The current classpath supports the following names: [] >>>> > >>> > > > at >>>> > org.apache.lucene.util.NamedSPILoader.lookup(NamedSPILoader.java:113) >>>> > >>> > > > at >>>> > org.apache.lucene.codecs.Codec$Holder.<clinit>(Codec.java:58) >>>> > >>> > > > ... 19 more >>>> > >>> > > > >>>> > >>> > > > org.apache.solr.embedded.TestJettySolrRunner > classMethod >>>> FAILED >>>> > >>> > > > java.lang.NullPointerException >>>> > >>> > > > at >>>> > java.base/java.util.Objects.requireNonNull(Objects.java:221) >>>> > >>> > > > at >>>> > org.apache.lucene.codecs.Codec.setDefault(Codec.java:151) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleSetupAndRestoreClassEnv.after(TestRuleSetupAndRestoreClassEnv.java:292) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:49) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:38) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:53) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60) >>>> > >>> > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:47) >>>> > >>> > > > at >>>> org.junit.rules.RunRules.evaluate(RunRules.java:20) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:390) >>>> > >>> > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.ThreadLeakControl.lambda$forkTimeoutingTask$0(ThreadLeakControl.java:850) >>>> > >>> > > > at java.base/java.lang.Thread.run(Thread.java:829) >>>> > >>> > > > >>>> > >>> > > > org.apache.solr.embedded.TestJettySolrRunner > test suite's >>>> > output saved to >>>> > >>>> /Users/gus/projects/apache/solr/code/solr/solr/test-framework/build/test-results/test/outputs/OUTPUT-org.apache.solr.embedded.TestJettySolrRunner.txt, >>>> > copied below: >>>> > >>> > > > > java.lang.ExceptionInInitializerError >>>> > >>> > > > > at >>>> > org.apache.lucene.codecs.Codec.getDefault(Codec.java:141) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleSetupAndRestoreClassEnv.before(TestRuleSetupAndRestoreClassEnv.java:137) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:42) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:38) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:53) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:47) >>>> > >>> > > > > at >>>> > org.junit.rules.RunRules.evaluate(RunRules.java:20) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:390) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.ThreadLeakControl.lambda$forkTimeoutingTask$0(ThreadLeakControl.java:850) >>>> > >>> > > > > at >>>> java.base/java.lang.Thread.run(Thread.java:829) >>>> > >>> > > > > >>>> > >>> > > > > Caused by: >>>> > >>> > > > > java.lang.IllegalArgumentException: An SPI >>>> class of >>>> > type org.apache.lucene.codecs.Codec with name 'Lucene95' does not >>>> exist. >>>> > You need to add the corresponding JAR file supporting this SPI to your >>>> > classpath. The current classpath supports the following names: [] >>>> > >>> > > > > at >>>> > org.apache.lucene.util.NamedSPILoader.lookup(NamedSPILoader.java:113) >>>> > >>> > > > > at >>>> > org.apache.lucene.codecs.Codec$Holder.<clinit>(Codec.java:58) >>>> > >>> > > > > ... 19 more >>>> > >>> > > > > java.lang.NullPointerException >>>> > >>> > > > > at >>>> > java.base/java.util.Objects.requireNonNull(Objects.java:221) >>>> > >>> > > > > at >>>> > org.apache.lucene.codecs.Codec.setDefault(Codec.java:151) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleSetupAndRestoreClassEnv.after(TestRuleSetupAndRestoreClassEnv.java:292) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:49) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:38) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:53) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60) >>>> > >>> > > > > at >>>> > >>>> org.apache.lucene.tests.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:47) >>>> > >>> > > > > at >>>> > org.junit.rules.RunRules.evaluate(RunRules.java:20) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:390) >>>> > >>> > > > > at >>>> > >>>> com.carrotsearch.randomizedtesting.ThreadLeakControl.lambda$forkTimeoutingTask$0(ThreadLeakControl.java:850) >>>> > >>> > > > > at >>>> java.base/java.lang.Thread.run(Thread.java:829) >>>> > >>> > > > 2> NOTE: Mac OS X 12.6 aarch64/Azul Systems, Inc. 11.0.19 >>>> > (64-bit)/cpus=10,threads=1,free=235002360,total=268435456 >>>> > >>> > > > 2> NOTE: All tests run in this JVM: [TestJettySolrRunner] >>>> > >>> > > > 2> NOTE: reproduce with: gradlew test --tests >>>> > TestJettySolrRunner -Dtests.seed=2FB768B5A303764 -Dtests.asserts=true >>>> > -Dtests.file.encoding=UTF-8 >>>> > >>> > > > >>>> > >>> > > > The only difference I've been able to determine is that the >>>> IDE >>>> > does not run the test with a security manager, but that feels like a >>>> red >>>> > herring since nothing is throwing security exception (or if it is, >>>> it's >>>> > getting swallowed!). >>>> > >>> > > > >>>> > >>> > > > I have debugged and I can see that the classloaders have >>>> the new >>>> > lucene jars I built on the classpath (in /Users/gus/.m2/repository as >>>> they >>>> > should), but I haven't yet figuree out why the services are not >>>> loading. >>>> > >>> > > > >>>> > >>> > > > -Gus >>>> > >>> > > > >>>> > >>> > > > >>>> > >>> > > > -- >>>> > >>> > > > http://www.needhamsoftware.com (work) >>>> > >>> > > > http://www.the111shift.com (play) >>>> > >>> > > > >>>> > >>> > > > >>>> > >>> > > > -- >>>> > >>> > > > http://www.needhamsoftware.com (work) >>>> > >>> > > > http://www.the111shift.com (play) >>>> > >>> >>>> > >>> >>>> --------------------------------------------------------------------- >>>> > >>> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org >>>> > >>> For additional commands, e-mail: dev-h...@lucene.apache.org >>>> > >>> >>>> > > >>>> > > >>>> > > -- >>>> > > http://www.needhamsoftware.com (work) >>>> > > http://www.the111shift.com (play) >>>> > >>>> > --------------------------------------------------------------------- >>>> > To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org >>>> > For additional commands, e-mail: dev-h...@lucene.apache.org >>>> > >>>> > >>>> >>>> -- >>>> http://www.needhamsoftware.com (work) >>>> http://www.the111shift.com (play) >>>> >>> >> >> -- >> http://www.needhamsoftware.com (work) >> http://www.the111shift.com (play) >> > -- http://www.needhamsoftware.com (work) http://www.the111shift.com (play)