Giter Site home page Giter Site logo

Comments (15)

triggerNZ avatar triggerNZ commented on July 30, 2024

I tried to reproduce this:

https://github.com/lukehutch/fast-classpath-scanner/compare/master...triggerNZ:outside-interface-example?expand=1

It definitely fails in my example, but I want to introduce a pure java test case, rather than submitting my scala example.

Unfortunately, I could not get it to fail. Will explore further...

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

Hmm. As stated in README.md (in the Constructor section), this is supposed to succeed -- if a class inside a whitelisted package refers to another class that is outside a whitelisted package (e.g. as a superclass, or for an implemented interface), then the referenced class is returned in the list of all classes (or superclasses, or implemented interfaces), just as you requested. If it doesn't work this way, it may indicate a bug of some sort.

Unfortunately I know nothing of the details of how Scala might compile its classes differently than Java, and I wouldn't even know how to exactly reproduce your testcase, so I don't think I can help debug this effectively. However, try calling .verbose() before .scan(), and compare the output for minimalistic Java and Scala testcases -- this should hopefully give you enough info to figure out what's going on.

Please keep me posted. I definitely want to support Scala with FastClasspathScanner, but you may be the first person to have tried this.

from classgraph.

triggerNZ avatar triggerNZ commented on July 30, 2024

@lukehutch cool, I will investigate further. javap tells me that the output of my scala traits is exactly what I would expect the java interfaces to look like, but there may be something deeper. For the record: here is my code, and the tests that are failing. Pasting as snippets, because the paperwork to open-source our project is still in the works :D

The following is my test case:

import org.specs2.Specification


package commbank.coppersmith.util {

import io.github.lukehutch.fastclasspathscanner.FastClasspathScanner

object F extends someothersillypackage.Outside

  object ObjectFinderSpec extends Specification {
    def is =
      s2"""
        Object finder
          Can find objects of a trait from another package $findObjectsTraitOtherPackage
      """

    def findObjectsTraitOtherPackage = Seq(
      new FastClasspathScanner("commbank.coppersmith.util").scan()
        .getNamesOfClassesImplementing("someothersillypackage.Outside").isEmpty === false
    )
  }

}

package someothersillypackage {
  trait Outside
}

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

I'm pretty sure legal won't get on your case for posting a minimal testcase into a bugreport ;-)

You can probably debug this much faster than I could, since I have close to zero experience with Scala, but let me know if you need assistance.

Please paste the results here of running FastClasspathScanner with .verbose() then .scan() for what you think should be exactly equivalent testcases in Java and Scala -- that should help figure out what's going wrong.

from classgraph.

triggerNZ avatar triggerNZ commented on July 30, 2024

Update: I have added scala compilation support for tests and have a breaking test. You can see my fork for details. Verbose output seems what we would expect:

FastClasspathScanner: Found Class-Path entry in jar:file:/Users/tin/dev/fast-classpath-scanner/target/surefire/surefirebooter1624711121499741185.jar!/META-INF/MANIFEST.MF: file:/Users/tin/.m2/repository/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.jar file:/Users/tin/.m2/repository/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.jar file:/Users/tin/dev/fast-classpath-scanner/target/test-classes/ file:/Users/tin/dev/fast-classpath-scanner/target/classes/ file:/Users/tin/.m2/repository/junit/junit/4.12/junit-4.12.jar file:/Users/tin/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar file:/Users/tin/.m2/repository/org/assertj/assertj-core/3.1.0/assertj-core-3.1.0.jar file:/Users/tin/.m2/repository/org/scala-lang/scala-library/2.11.4/scala-library-2.11.4.jar
FastClasspathScanner: Found classpath element: /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.jar
FastClasspathScanner: Found classpath element: /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.jar
FastClasspathScanner: Found classpath element: /Users/tin/dev/fast-classpath-scanner/target/test-classes
FastClasspathScanner: Found classpath element: /Users/tin/dev/fast-classpath-scanner/target/classes
FastClasspathScanner: Found classpath element: /Users/tin/.m2/repository/junit/junit/4.12/junit-4.12.jar
FastClasspathScanner: Found classpath element: /Users/tin/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
FastClasspathScanner: Found classpath element: /Users/tin/.m2/repository/org/assertj/assertj-core/3.1.0/assertj-core-3.1.0.jar
FastClasspathScanner: Found classpath element: /Users/tin/.m2/repository/org/scala-lang/scala-library/2.11.4/scala-library-2.11.4.jar
FastClasspathScanner: Found classpath element: /Users/tin/dev/fast-classpath-scanner/target/surefire/surefirebooter1624711121499741185.jar
FastClasspathScanner: *** Starting scan ***
FastClasspathScanner: Classpath elements: [/Users/tin/.m2/repository/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.jar, /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.jar, /Users/tin/dev/fast-classpath-scanner/target/test-classes, /Users/tin/dev/fast-classpath-scanner/target/classes, /Users/tin/.m2/repository/junit/junit/4.12/junit-4.12.jar, /Users/tin/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar, /Users/tin/.m2/repository/org/assertj/assertj-core/3.1.0/assertj-core-3.1.0.jar, /Users/tin/.m2/repository/org/scala-lang/scala-library/2.11.4/scala-library-2.11.4.jar, /Users/tin/dev/fast-classpath-scanner/target/surefire/surefirebooter1624711121499741185.jar]
FastClasspathScanner: Whitelisted paths:  [io/github/lukehutch/fastclasspathscanner/]
FastClasspathScanner: Blacklisted paths:  []
FastClasspathScanner: => Scanning classpath element: /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.jar
FastClasspathScanner: Scanning jarfile: /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.jar
FastClasspathScanner: Scanned jarfile /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.jar in 0 msec
FastClasspathScanner: => Scanning classpath element: /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.jar
FastClasspathScanner: Scanning jarfile: /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.jar
FastClasspathScanner: Scanned jarfile /Users/tin/.m2/repository/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.jar in 0 msec
FastClasspathScanner: => Scanning classpath element: /Users/tin/dev/fast-classpath-scanner/target/test-classes
FastClasspathScanner: Scanning path: /
FastClasspathScanner: Scanning path: io/
FastClasspathScanner: Scanning path: io/github/
FastClasspathScanner: Scanning path: io/github/lukehutch/
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/
FastClasspathScanner: Reached whitelisted path: io/github/lukehutch/fastclasspathscanner/
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/F$.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/F.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScannerTest$1.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScannerTest$2.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScannerTest$3.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScannerTest$4.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScannerTest.class in 1 msec
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/metaannotation/
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/A.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/B.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/C.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/D.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/E.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/F.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/G.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/H.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/I.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/J.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/K.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/L.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/M.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/metaannotation/MetaAnnotationTest.class in 0 msec
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/outside/
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/outside/Outside.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/ScalaBugTest.class in 1 msec
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/whitelisted/
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/whitelisted/blacklisted/
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/blacklisted/Blacklisted.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/Cls.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/ClsSub.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/ClsSubSub.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/Iface.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/IfaceSub.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/IfaceSubSub.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/Impl1.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/Impl1Sub.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/Impl1SubSub.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/Impl2.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/Impl2Sub.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/Impl2SubSub.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/ImplementsOutside.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/whitelisted/StaticField.class in 0 msec
FastClasspathScanner: Scanning path: outside/
FastClasspathScanner: Scanning path: someothersillypackage/
FastClasspathScanner: => Scanning classpath element: /Users/tin/dev/fast-classpath-scanner/target/classes
FastClasspathScanner: Scanning path: /
FastClasspathScanner: Scanning path: io/
FastClasspathScanner: Scanning path: io/github/
FastClasspathScanner: Scanning path: io/github/lukehutch/
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/
FastClasspathScanner: Reached whitelisted path: io/github/lukehutch/fastclasspathscanner/
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/classgraph/
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassfileBinaryParser.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$1.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$10.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$11.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$2.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$3.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$4.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$5.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$6.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$7.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$8.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder$9.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassGraphBuilder.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/ClassInfo.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/classgraph/DAGNode.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$1.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$10.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$2.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$3.class in 1 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$4.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$5.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$6.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$7.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$8.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$9.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner$ClassMatcher.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/FastClasspathScanner.class in 1 msec
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/matchprocessor/
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/matchprocessor/ClassAnnotationMatchProcessor.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/matchprocessor/FileMatchContentsProcessor.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/matchprocessor/FileMatchProcessor.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/matchprocessor/InterfaceMatchProcessor.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/matchprocessor/StaticFinalFieldMatchProcessor.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/matchprocessor/SubclassMatchProcessor.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/matchprocessor/SubinterfaceMatchProcessor.class in 0 msec
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/scanner/
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/scanner/classloaderhandler/
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/scanner/classloaderhandler/ClassLoaderHandler.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/scanner/classloaderhandler/JBossClassLoaderHandler.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/scanner/classloaderhandler/URLClassLoaderHandler.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/scanner/classloaderhandler/WeblogicClassLoaderHandler.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/scanner/ClasspathFinder.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/scanner/RecursiveScanner$FilePathMatcher.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/scanner/RecursiveScanner$FilePathTester.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/scanner/RecursiveScanner.class in 0 msec
FastClasspathScanner: Scanning path: io/github/lukehutch/fastclasspathscanner/utils/
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/utils/HashClassfileContents$1.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/utils/HashClassfileContents.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/utils/LazyMap$1.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/utils/LazyMap$2.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/utils/LazyMap.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/utils/Log.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/utils/MultiSet.class in 0 msec
FastClasspathScanner: Scanned file io/github/lukehutch/fastclasspathscanner/utils/Utils.class in 0 msec
FastClasspathScanner: Scanning path: META-INF/
FastClasspathScanner: => Scanning classpath element: /Users/tin/.m2/repository/junit/junit/4.12/junit-4.12.jar
FastClasspathScanner: Scanning jarfile: /Users/tin/.m2/repository/junit/junit/4.12/junit-4.12.jar
FastClasspathScanner: Scanned jarfile /Users/tin/.m2/repository/junit/junit/4.12/junit-4.12.jar in 0 msec
FastClasspathScanner: => Scanning classpath element: /Users/tin/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
FastClasspathScanner: Scanning jarfile: /Users/tin/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
FastClasspathScanner: Scanned jarfile /Users/tin/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar in 0 msec
FastClasspathScanner: => Scanning classpath element: /Users/tin/.m2/repository/org/assertj/assertj-core/3.1.0/assertj-core-3.1.0.jar
FastClasspathScanner: Scanning jarfile: /Users/tin/.m2/repository/org/assertj/assertj-core/3.1.0/assertj-core-3.1.0.jar
FastClasspathScanner: Scanned jarfile /Users/tin/.m2/repository/org/assertj/assertj-core/3.1.0/assertj-core-3.1.0.jar in 0 msec
FastClasspathScanner: => Scanning classpath element: /Users/tin/.m2/repository/org/scala-lang/scala-library/2.11.4/scala-library-2.11.4.jar
FastClasspathScanner: Scanning jarfile: /Users/tin/.m2/repository/org/scala-lang/scala-library/2.11.4/scala-library-2.11.4.jar
FastClasspathScanner: Scanned jarfile /Users/tin/.m2/repository/org/scala-lang/scala-library/2.11.4/scala-library-2.11.4.jar in 3 msec
FastClasspathScanner: => Scanning classpath element: /Users/tin/dev/fast-classpath-scanner/target/surefire/surefirebooter1624711121499741185.jar
FastClasspathScanner: Scanning jarfile: /Users/tin/dev/fast-classpath-scanner/target/surefire/surefirebooter1624711121499741185.jar
FastClasspathScanner: Scanned jarfile /Users/tin/dev/fast-classpath-scanner/target/surefire/surefirebooter1624711121499741185.jar in 0 msec
FastClasspathScanner: *** Time taken by .scan(): 21 ms ***

So it scans over F, and F$ (I think F$ is the one we are actually looking for)

from classgraph.

triggerNZ avatar triggerNZ commented on July 30, 2024

So it appears that the issue is on ClassGraphBuilder.java:266. At this point interfaceNameToInterfaceNode, doesn't contain the outside trait. I don't really understand why/how it works for the java case

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

Yes, I'm looking at this right now. I discovered that Scala does some funky stuff when it compiles code. The F$ class is a "companion class", and contains the interfaces (but not annotations). F contains annotations but not interfaces. (There's also a class generated in other cases, not this one, "MyTrait$class" based on trait "MyTrait", to hold the static methods for the trait.

I'm currently writing code to merge F, F$ and F$class into a single entry in the class graph.

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

Thanks for reporting this, it should be fixed now, but can you please test it with your setup?

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

(Just released v1.9.8 to Maven with these fixes, in case it's easier for you to test it that way.)

from classgraph.

triggerNZ avatar triggerNZ commented on July 30, 2024

@lukehutch thank you so much for fixing that so promptly. My dependency on 1.9.8 isn't resolving yet though. I may be doing something stupid. Is there a resolver i have to set up?

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

You may need to manually rebuild your Maven Central index -- the release is definitely up: https://github.com/lukehutch/fast-classpath-scanner/releases

Failing that, it would be great if you could just do a "git clone" and copy the FastClasspathScanner project into your project's source directory to test it.

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

Will reopen this until it's tested and confirmed working!

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

Hi @triggerNZ, did you get the 0.9.8 dependency resolved? Would love to know if I can close this bug -- thanks!

from classgraph.

triggerNZ avatar triggerNZ commented on July 30, 2024

Hi @lukehutch, sorry it has taken me this long to reply - it has been a busy week. There is an error in the class merging code. If you run mvn test in my fork you can see the errors. I haven't had time to investigate further

from classgraph.

lukehutch avatar lukehutch commented on July 30, 2024

@triggerNZ thanks for taking another look. You're right, your test generated a lot of warnings. I fixed these in the latest checkin, and your test now passes, so I'll close this bug and release 0.9.9. Thank you again for your help getting Scala up and working (so far, at least :-) ).

from classgraph.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.