Ok pushed an attempt at a clearer message. LMK what you think.

On Tue, May 16, 2023 at 11:30 PM Gus Heck <gus.h...@gmail.com> wrote:

> Ok reading my last message I realize it still might not be clear. Here's
> what I observed:
>
> The class Codec clearly loaded, (from the lucene-core jar) when
> Codec$Holder tried to load the class initializer code went looking for the
> service definitions. It failed to find any of the the
> META-INF/services/org.apache.lucene.codec.Codec files in any of the jars
> residing in ~/.m2/repository (where the class evidently loads from),
> including the one in **the same jar that Codec had loaded from** and I
> observed it throwing Security exception by debugging at a level underneath
> the quoted method in my longer message above.
>
> So what it seems to imply is that the ability of java to load a class from
> a jar on the class path is not related to the FilePermission needed to load
> the services file.
>
> So what I want to communicate to the user is 2 things:
>
> 1. They are running a security manager, so the policy file is relevant.
> 2. The fact they are not seeing a SecurityException does not eliminate the
> possibility that they are missing permissions.
>
> We should craft a message that is clearer and communicates those two
> points.
>
> Adding a permission to the policy for the tests fixed everything (once I
> found the right policy file).
>
> -Gus
>
> On Tue, May 16, 2023 at 11:10 PM Gus Heck <gus.h...@gmail.com> wrote:
>
>> Oh hmm the google UI hid the quoted bit. If you don't like message let's
>> improve it. (actually, it should probably say the "file in the jar"... or
>> something a little more specific... not the jar entirely. The class loads,
>> but the service loader cant access the file in the same jar without the
>> FilePermission to (re?) access the jar it seems)
>>
>> On Tue, May 16, 2023 at 11:05 PM Gus Heck <gus.h...@gmail.com> wrote:
>>
>>> 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)
>>>
>>
>>
>> --
>> 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)

Reply via email to