Comments (15)
I tried to reproduce this:
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.
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.
@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.
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.
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.
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.
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.
Thanks for reporting this, it should be fixed now, but can you please test it with your setup?
from classgraph.
(Just released v1.9.8 to Maven with these fixes, in case it's easier for you to test it that way.)
from classgraph.
@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.
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.
Will reopen this until it's tested and confirmed working!
from classgraph.
Hi @triggerNZ, did you get the 0.9.8 dependency resolved? Would love to know if I can close this bug -- thanks!
from classgraph.
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.
@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)
- Documentation issue HOT 2
- META-INF/MANIFEST.MF must include Dependencies: jdk.unsupported HOT 8
- Issue 673 test sometimes fails
- ClassGraph can't scan the jce.jar in jdk on the linux system, why? HOT 1
- ClassGraph thinks the application jars are JRE_LIB_OR_EXT_JARS HOT 5
- Get the Class and method comments HOT 2
- How to expose the full classpath from classloader? HOT 1
- Feature request:Add getClassesWithAllAnnotations HOT 8
- Expose a way to get the jar version that a Resource belongs to HOT 2
- zip64 bug in LogicalZipFile HOT 3
- JBoss EAP 7.4.15 class loading issue on EJB Modules HOT 17
- ClassRefTypeSignature.getFullyQualifiedClassName() can return incorrect classnames in some circumstances, using "." instead of "$" HOT 4
- Trouble with GraalVM native-image post compile HOT 3
- classgraph cannot scan all files of guava 33.2.1 HOT 4
- GraalVM static initializer -- unsure if actually working? HOT 1
- Consider bridge to nio Path HOT 7
- acceptPackages with glob wildcard not working properly HOT 1
- #rejectPaths usage with relative paths HOT 3
- #rejectClasses usage for module-info.class HOT 2
- Cannot find private methods in Kotlin files HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from classgraph.