Skip to content

Sisu "strict" mode is not so strict #181

Closed

Description

@cstamas

Maven 4 since some beta is using Sisu in strict mode (see https://issues.apache.org/jira/browse/MNG-8228). Still, this strictness is not complete.

Reproducer:

  • create .mvn/extensions.xml with following content
<?xml version="1.0" encoding="UTF-8"?>
<extensions>
    <extension>
        <groupId>eu.maveniverse.maven.mimir</groupId>
        <artifactId>extension3</artifactId>
        <version>0.3.5</version>
    </extension>
</extensions>
  • use maven 4 rc-3 or alike with Java 17.
  • explanation: Mimir 0.3.5 is Java 21 bytecode, but am using Maven 4 with Java 17.

Reproducer in action:

[cstamas@angeleyes mimir-test]$ cat .mvn/extensions.xml 
<?xml version="1.0" encoding="UTF-8"?>
<extensions>
    <extension>
        <groupId>eu.maveniverse.maven.mimir</groupId>
        <artifactId>extension3</artifactId>
        <version>0.3.5</version>
    </extension>
</extensions>
[cstamas@angeleyes mimir-test]$ mvn -v
Apache Maven 4.0.0-rc-4-SNAPSHOT (d80804c3b45be891b6ab2cd29f9a1e56c96d956a)
Maven home: /home/cstamas/Tools/maven/apache-maven-4.0.0-rc-4-SNAPSHOT
Java version: 17.0.14, vendor: Eclipse Adoptium, runtime: /home/cstamas/.sdkman/candidates/java/17.0.14-tem
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.13.5-200.fc41.x86_64", arch: "amd64", family: "unix"
[cstamas@angeleyes mimir-test]$ mvn validate
[INFO] 
[INFO] 1 problem was encountered while building the effective settings (use -e to see details)
[INFO] 
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------------------< org.apache.shiro.samples:samples-spring-boot-3-web >----------------------------------
[INFO] Building samples-spring-boot-3-web 2.0.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] ---------------------------------------------------------[ jar ]----------------------------------------------------------
[INFO] --------------------------------------------------------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] --------------------------------------------------------------------------------------------------------------------------
[INFO] Total time:  0.151 s
[INFO] Finished at: 2025-03-05T18:56:18+01:00
[INFO] --------------------------------------------------------------------------------------------------------------------------
[cstamas@angeleyes mimir-test]$ 

Mimir is not loaded, nor build failed. With -Dsisu.debug you can see:

[INFO] [stdout] DEBUG: Sisu - Problem scanning: jar:file:/home/cstamas/.m2/repository-oss/eu/maveniverse/maven/mimir/node/file/0.3.5/file-0.3.5.jar!/eu/maveniverse/maven/mimir/node/file/FileNodeFactory.class
[INFO] [stdout] java.lang.TypeNotPresentException: Type eu.maveniverse.maven.mimir.node.file.FileNodeFactory not present
[INFO] [stdout] 	at org.eclipse.sisu.space.URLClassSpace.loadClass(URLClassSpace.java:149)
[INFO] [stdout] 	at org.eclipse.sisu.space.QualifiedTypeVisitor.leaveClass(QualifiedTypeVisitor.java:136)
[INFO] [stdout] 	at org.eclipse.sisu.plexus.PlexusTypeVisitor.leaveClass(PlexusTypeVisitor.java:119)
[INFO] [stdout] 	at org.eclipse.sisu.space.SpaceScanner$1.visitEnd(SpaceScanner.java:219)
[INFO] [stdout] 	at org.objectweb.asm.ClassReader.accept(ClassReader.java:749)
[INFO] [stdout] 	at org.objectweb.asm.ClassReader.accept(ClassReader.java:425)
[INFO] [stdout] 	at org.eclipse.sisu.space.SpaceScanner.accept(SpaceScanner.java:143)
[INFO] [stdout] 	at org.eclipse.sisu.space.SpaceScanner.accept(SpaceScanner.java:109)
[INFO] [stdout] 	at org.eclipse.sisu.space.SpaceModule.scanForElements(SpaceModule.java:218)
[INFO] [stdout] 	at org.eclipse.sisu.space.SpaceModule.configure(SpaceModule.java:168)
[INFO] [stdout] 	at org.eclipse.sisu.plexus.PlexusAnnotatedBeanModule.configure(PlexusAnnotatedBeanModule.java:119)
[INFO] [stdout] 	at org.eclipse.sisu.plexus.PlexusBindingModule.configure(PlexusBindingModule.java:65)
[INFO] [stdout] 	at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:426)
[INFO] [stdout] 	at com.google.inject.spi.Elements.getElements(Elements.java:113)
[INFO] [stdout] 	at com.google.inject.spi.Elements.getElements(Elements.java:106)
[INFO] [stdout] 	at org.eclipse.sisu.wire.WireModule.configure(WireModule.java:77)
[INFO] [stdout] 	at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:426)
[INFO] [stdout] 	at com.google.inject.spi.Elements.getElements(Elements.java:113)
[INFO] [stdout] 	at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:160)
[INFO] [stdout] 	at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
[INFO] [stdout] 	at com.google.inject.Guice.createInjector(Guice.java:87)
[INFO] [stdout] 	at com.google.inject.Guice.createInjector(Guice.java:69)
[INFO] [stdout] 	at com.google.inject.Guice.createInjector(Guice.java:59)
[INFO] [stdout] 	at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:483)
[INFO] [stdout] 	at org.codehaus.plexus.DefaultPlexusContainer.discoverComponents(DefaultPlexusContainer.java:462)
[INFO] [stdout] 	at org.apache.maven.cling.invoker.PlexusContainerCapsuleFactory.container(PlexusContainerCapsuleFactory.java:117)
[INFO] [stdout] 	at org.apache.maven.cling.invoker.PlexusContainerCapsuleFactory.createContainerCapsule(PlexusContainerCapsuleFactory.java:74)
[INFO] [stdout] 	at org.apache.maven.cling.invoker.LookupInvoker.container(LookupInvoker.java:506)
[INFO] [stdout] 	at org.apache.maven.cling.invoker.LookupInvoker.doInvoke(LookupInvoker.java:158)
[INFO] [stdout] 	at org.apache.maven.cling.invoker.LookupInvoker.invoke(LookupInvoker.java:135)
[INFO] [stdout] 	at org.apache.maven.cling.ClingSupport.run(ClingSupport.java:76)
[INFO] [stdout] 	at org.apache.maven.cling.MavenCling.main(MavenCling.java:51)
[INFO] [stdout] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO] [stdout] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[INFO] [stdout] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[INFO] [stdout] 	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314)
[INFO] [stdout] Caused by: java.lang.UnsupportedClassVersionError: eu/maveniverse/maven/mimir/node/file/FileNodeFactory has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
[INFO] [stdout] 	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
[INFO] [stdout] 	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
[INFO] [stdout] 	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
[INFO] [stdout] 	at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
[INFO] [stdout] 	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
[INFO] [stdout] 	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
[INFO] [stdout] 	at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
[INFO] [stdout] 	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.realm.ClassRealm.findClassInternal(ClassRealm.java:256)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:351)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:36)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:225)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:210)
[INFO] [stdout] 	at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:205)
[INFO] [stdout] 	at org.eclipse.sisu.space.URLClassSpace.loadClass(URLClassSpace.java:141)
[INFO] [stdout] 	... 39 more

Activity

  1. kwin commented on Mar 5, 2025

    @kwin
    Contributor

    In

    there is only special handling for RuntimeException and IOException. The UnsupportedClassVersionError is not one of those and therefore not wrapped. I am wondering who is catching that throwable? AFAIK it is not caught inside Sisu....

    Update: Actually UnsupportedClassVersionError is always wrapped in a TypeNotPresentException (which is a runtime exception) in

    catch ( final Exception e )
    {
    throw new TypeNotPresentException( name, e );
    }
    catch ( final LinkageError e )
    {
    throw new TypeNotPresentException( name, e );
    }

  2. cstamas commented on Mar 5, 2025

    @cstamas
    MemberAuthor

    Nope, is not Maven as we debugged. Simply the "strict" is false despite being set to true.

  3. self-assigned this
    on Mar 7, 2025
  4. added a commit that references this issue on Mar 7, 2025
    90558f5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions