Java runtime metadata analysis

Overview

Released org.reflections:reflections:0.9.12 - with support for Java 8

Reflections library has over 2.5 million downloads per month from Maven Central, and is being used by thousands of projects and libraries. We're looking for maintainers to assist in reviewing pull requests and managing releases, please reach out.

Java runtime metadata analysis, in the spirit of Scannotations

Reflections scans your classpath, indexes the metadata, allows you to query it on runtime and may save and collect that information for many modules within your project.

Using Reflections you can query your metadata such as:

  • get all subtypes of some type
  • get all types/members annotated with some annotation
  • get all resources matching a regular expression
  • get all methods with specific signature including parameters, parameter annotations and return type

Build Status

Intro

Add Reflections to your project. for maven projects just add this dependency:

<dependency>
    <groupId>org.reflections</groupId>
    <artifactId>reflections</artifactId>
    <version>0.9.12</version>
</dependency>

A typical use of Reflections would be:

Reflections reflections = new Reflections("my.project");

Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeType.class);

Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(SomeAnnotation.class);

Usage

Basically, to use Reflections first instantiate it with urls and scanners

//scan urls that contain 'my.package', include inputs starting with 'my.package', use the default scanners
Reflections reflections = new Reflections("my.package");

//or using ConfigurationBuilder
new Reflections(new ConfigurationBuilder()
     .setUrls(ClasspathHelper.forPackage("my.project.prefix"))
     .setScanners(new SubTypesScanner(), 
                  new TypeAnnotationsScanner().filterResultsBy(optionalFilter), ...),
     .filterInputsBy(new FilterBuilder().includePackage("my.project.prefix"))
     ...);

Then use the convenient query methods: (depending on the scanners configured)

//SubTypesScanner
Set<Class<? extends Module>> modules = 
    reflections.getSubTypesOf(com.google.inject.Module.class);
//TypeAnnotationsScanner 
Set<Class<?>> singletons = 
    reflections.getTypesAnnotatedWith(javax.inject.Singleton.class);
//ResourcesScanner
Set<String> properties = 
    reflections.getResources(Pattern.compile(".*\\.properties"));
//MethodAnnotationsScanner
Set<Method> resources =
    reflections.getMethodsAnnotatedWith(javax.ws.rs.Path.class);
Set<Constructor> injectables = 
    reflections.getConstructorsAnnotatedWith(javax.inject.Inject.class);
//FieldAnnotationsScanner
Set<Field> ids = 
    reflections.getFieldsAnnotatedWith(javax.persistence.Id.class);
//MethodParameterScanner
Set<Method> someMethods =
    reflections.getMethodsMatchParams(long.class, int.class);
Set<Method> voidMethods =
    reflections.getMethodsReturn(void.class);
Set<Method> pathParamMethods =
    reflections.getMethodsWithAnyParamAnnotated(PathParam.class);
//MethodParameterNamesScanner
List<String> parameterNames = 
    reflections.getMethodParamNames(Method.class)
//MemberUsageScanner
Set<Member> usages = 
    reflections.getMethodUsages(Method.class)
  • If no scanners are configured, the default will be used - SubTypesScanner and TypeAnnotationsScanner.
  • Classloader can also be configured, which will be used for resolving runtime classes from names.
  • Reflections expands super types by default. This solves some problems with transitive urls are not scanned.

Checkout the javadoc for more info.

Also, browse the tests directory to see some more examples.

ReflectionUtils

ReflectionsUtils contains some convenient Java reflection helper methods for getting types/constructors/methods/fields/annotations matching some predicates, generally in the form of *getAllXXX(type, withYYY)

for example:

import static org.reflections.ReflectionUtils.*;

Set<Method> getters = getAllMethods(someClass,
  withModifier(Modifier.PUBLIC), withPrefix("get"), withParametersCount(0));

//or
Set<Method> listMethodsFromCollectionToBoolean = 
  getAllMethods(List.class,
    withParametersAssignableTo(Collection.class), withReturnType(boolean.class));

Set<Field> fields = getAllFields(SomeClass.class, withAnnotation(annotation), withTypeAssignableTo(type));

See more in the ReflectionUtils javadoc

Integrating into your build lifecycle

Although scanning can be easily done on bootstrap time of your application - and shouldn't take long, it is sometime a good idea to integrate Reflections into your build lifecyle. With simple Maven/Gradle/SBT/whatever configuration you can save all scanned metadata into xml/json files just after compile time. Later on, when your project is bootstrapping you can let Reflections collect all those resources and re-create that metadata for you, making it available at runtime without re-scanning the classpath.

For Maven, see example using gmavenplus in the reflections-maven repository

Other use cases

See the UseCases wiki page

Contribute

Pull requests are welcomed!!

Apologize for not maintaining this repository continuously! We're looking for maintainers to assist in reviewing pull requests and managing releases, please reach out.

The license is WTFPL, just do what the fuck you want to.

This library is published as an act of giving and generosity, from developers to developers.

Please feel free to use it, and to contribute to the developers community in the same manner. Dāna Donate

Cheers

Comments
  • License Question

    License Question

    The .pom file lists both the WTFPL and the 2-clause BSD licenses. However, the README file only lists the WTFPL license.

    Any insight on which license(s) will govern is much appreciated!

    opened by spectejb 38
  • multithreading issues with 0.9.10

    multithreading issues with 0.9.10

    Hi! I'm experiencing multithreading issues with version 0.9.10.

    With two threads accessing the same jar file i get the following Log Messages: DEBUG Thread-1 2015-07-15 11:26:33,136 org.reflections.Reflections - going to scan these urls: jar:file:/path/to/jar/myjar.jar!/ DEBUG Thread-2 2015-07-15 11:26:33,138 org.reflections.Reflections - going to scan these urls: ... jar:file:/path/to/jar/myjar.jar!/ INFO Thread-1 2015-07-15 11:26:33,289 org.reflections.Reflections - Reflections took 153 ms to scan 3 urls, producing 207 keys and 529 values

    Thread-2 crashes with this stack:

    java.lang.IllegalStateException: zip file closed at java.util.zip.ZipFile.ensureOpen(ZipFile.java:634) at java.util.zip.ZipFile.access$200(ZipFile.java:56) at java.util.zip.ZipFile$1.hasMoreElements(ZipFile.java:487) at java.util.jar.JarFile$1.hasMoreElements(JarFile.java:241) at org.reflections.vfs.ZipDir$1$1.computeNext(ZipDir.java:30) at org.reflections.vfs.ZipDir$1$1.computeNext(ZipDir.java:26) at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) at org.reflections.Reflections.scan(Reflections.java:240) at org.reflections.Reflections.scan(Reflections.java:204) at org.reflections.Reflections.(Reflections.java:129) at org.reflections.Reflections.(Reflections.java:170) at org.reflections.Reflections.(Reflections.java:143)

    The ZipDir seems to be created in DefaultUrlTypes.jarUrl.createDir(URL): return new ZipDir(((JarURLConnection) urlConnection).getJarFile());

    but sun.net.www.protocol.jar.JarURLConnection.getJarFile() uses (or may use) a cache: this.jarFile = factory.get(getJarFileURL(), getUseCaches());

    In my case both threads get the same instance of JarFile, and after the first thread has closed the ZipDir (which closes the JarFile) in org.reflections.Reflections.scan(URL):260 the second one gets the IllegalStateException.

    Cheers,

    Christian

    opened by schabe77 28
  • After migrating to 0.9.12, Getting exception : org.reflections.RflectionException: Scanner SubTypeScanner was not configured , even after configuring the scanner.

    After migrating to 0.9.12, Getting exception : org.reflections.RflectionException: Scanner SubTypeScanner was not configured , even after configuring the scanner.

    I was using 0.9.11 and with scanners it was working fine. but by just changing the version to 0.9.12 , stared getting the exception for "org.reflections.RflectionException: Scanner SubTypeScanner was not configured".

    Reflections reflections = new Reflections(new ConfigurationBuilder()
         .setUrls(ClasspathHelper.forPackage("my.project.prefix"))
         .setScanners(new SubTypesScanner(), new TypeAnnotationsScanner()),
         .filterInputsBy(new FilterBuilder().includePackage("my.project.prefix"))
         );
    
    reflections.getSubTypesOf(someClass);  // here it throws exception 
    
    

    I noticed that, when I add a class which extend some class to the package, this error goes. Same with FieldAnnotationScanner , or any other scanner.

    To try , please provide an invalid package for reflection creation, you will see all these errors coming even after configuring all scanners with reflection

    marked for next release known issue 
    opened by anandmnair 25
  • 0.10-RC1: Incorrect example for TypesAnnotated.with()

    0.10-RC1: Incorrect example for TypesAnnotated.with()

    In the example in the readme it states that

    Set<Class<?>> annotated = 
      reflections.get(TypesAnnotated.with(SomeAnnotation.class));
    

    In 0.10-RC1, it results in a Set<String>, as with() is backed by default QueryFunction<Store, String> with(Class<?>... keys) { return of(keys); }. Not only that, the collection is empty contrary to what was returned in 0.9.12.

    marked for next release known issue 
    opened by davidburstrom 13
  • Add osgi version of jar

    Add osgi version of jar

    Currently for our project we are creating an wrapper jar that allows us to make use of this project within our OSGi enabled project.

    https://github.com/motech/external-osgi-bundles/tree/master/reflections

    Adding the manifest to the source project would enable us to make use of new releases faster.

    opened by larubbio 13
  • Guava version conflicts - NoSuchMethodError

    Guava version conflicts - NoSuchMethodError

    I'm getting the following exception using Guava v23 and Reflections v0.9.11.

    Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
    	at org.reflections.Reflections.expandSuperTypes(Reflections.java:380)
    	at org.reflections.Reflections.<init>(Reflections.java:126)
    	at org.reflections.Reflections.<init>(Reflections.java:168)
    	at org.reflections.Reflections.<init>(Reflections.java:141)
            ...
    

    Going back to Reflections v0.9.10 fixes the problem, since it was compiled for Guava v15, which seems to be somehow compatible with Guava v23 but not with v20 (version used in Reflections v0.9.11).

    Any chance to update this lib to use Guava v23 in future releases? That would fix the problem once and for all.

    opened by Wilwilly 11
  • Exception in thread

    Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Predicate

    Error: Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Predicate at SQLUtils.getDriver(SQLUtils.java:5) at Main.main(Main.java:3) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) Caused by: java.lang.ClassNotFoundException: com.google.common.base.Predicate at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more

    Process finished with exit code 1

    Code: https://github.com/Woolworths/reflectionstest

    opened by Woolworths 11
  • Possible bug in getSubTypesOf

    Possible bug in getSubTypesOf

    I have the following code:

    String rootPackage = "blah.definitions";
    Set<Class<? extends ModelDefinition>> all = 
      new Reflections(rootPackage).getSubTypesOf(ModelDefinition.class);
    Set<Class<? extends ModelDefinition>> adminOnly = 
      new Reflections(rootPackage + ".admin").getSubTypesOf(ModelDefinition.class);
    Set<Class<? extends ModelDefinition>> pubOnly = 
      new Reflections(rootPackage + ".publisher").getSubTypesOf(ModelDefinition.class);
    Set<Class<? extends ModelDefinition>> userOnly = 
      new Reflections(rootPackage + ".user").getSubTypesOf(ModelDefinition.class);
    Set<Class<? extends ModelDefinition>> commonOnly = 
      new Reflections(rootPackage, new FilterBuilder()
        .exclude(rootPackage + ".admin.*")
        .exclude(rootPackage + ".user.*")
        .exclude(rootPackage + ".publisher.*")
        .exclude(rootPackage + ".anon.*")
      ).getSubTypesOf(ModelDefinition.class);
    

    where ModelDefinition is a custom class of which there can be subclasses in different subpackages that can have the same class name.

    The 5 sets contain the following:

    all = [class blah.definitions.AppRefModelDefinition, 
      class blah.definitions.publisher.AppDefinition, 
      class blah.definitions.user.ProfileModelDefinition, 
      class blah.definitions.publisher.ProfileModelDefinition, 
      class blah.definitions.RootAppModelDefinition, 
      class blah.definitions.user.UserAccessModelDefinition, 
      class blah.definitions.admin.AppDefinition]
    
    adminOnly = []
    
    pubOnly = [class blah.definitions.publisher.ProfileModelDefinition]
    
    userOnly = [class blah.definitions.user.ProfileModelDefinition, 
      class blah.definitions.user.UserAccessModelDefinition]
    
    commonOnly = [class blah.definitions.AppRefModelDefinition, 
      class blah.definitions.RootAppModelDefinition]
    

    The adminOnly set is wrong because it should contain blah.definitions.admin.AppDefinition; the pubOnly is also wrong because it does not contain the blah.definitions.publisher.AppDefinition class. Note that the two AppDefinition both extend RootAppModelDefinition, which might be relevant.

    I can add more code to reproduce it if needed.

    Is this a known bug?

    opened by giovannibotta 10
  • Code scanners should exclude META-INF by default

    Code scanners should exclude META-INF by default

    Scanners that are only supposed to scan code (and not resources) should by default have a path filter to exclude the META-INF directory. Otherwise, if logging is enabled, the log gets cluttered with output like

    09:38:56.774 [main] DEBUG org.reflections.Reflections - could not scan file META-INF/MANIFEST.MF in url file:/.../annotations-13.0.jar with scanner SubTypesScanner
    09:38:56.774 [main] DEBUG org.reflections.Reflections - could not scan file META-INF/MANIFEST.MF in url file:/.../annotations-13.0.jar with scanner TypeAnnotationsScanner
    

    for a simple call to getSubTypesOf().

    opened by sschuberth 8
  • Websphere adaptions in forPackage and forResource

    Websphere adaptions in forPackage and forResource

    This change is the bare minimum needed so that this library is usable on Websphere.

    Hope this minimal change gets accepted this time.

    Websphere is not able to find resources if you don't add / to it. This is especially a problem when using forPackage as the Websphere Classloader will never find anything! In case of forResource you might find something but it might be incomplete!

    opened by Xnyle 8
  • Exception with multi-maven builds (exclude current folder from scanned classpath)

    Exception with multi-maven builds (exclude current folder from scanned classpath)

    Hello,

    I have the following project setup:

    master
        |----> module1
            |----> class ClassA (has annotation @Annotation)
        |----> module2
            |----> class ClassB (also has annotation @Annotation)
    

    and I'm building it with maven, and I use an AbstractProcessor during compilation to find all types annotated with @Annotation. When I build it from the module1 level it all works fine. The problem appears when I build it from master level. Then, what happens is I get an exception that class B cannot be found.

    Caused by: org.reflections.ReflectionsException: could not get type for name ClassB
        at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:389)
        at org.reflections.ReflectionUtils.forNames(ReflectionUtils.java:398)
        at org.reflections.Reflections.getTypesAnnotatedWith(Reflections.java:385)
        at org.reflections.Reflections.getTypesAnnotatedWith(Reflections.java:370)
    

    Here's how I find the types annotated with @Annotation:

            final Reflections reflections =
                            new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forClassLoader(ClasspathHelper.staticClassLoader())).setScanners(
                                            new TypeAnnotationsScanner(), new SubTypesScanner()));
            return reflections.getTypesAnnotatedWith(Annotation.class);
    

    What happens is that the classloader will find also the following url:

    /home/petar/workspace/master/./
    

    and then it will be given to Reflections (method scan on line 235 in Reflections class ) where it will be treated as a SystemDir so reflections will recursively go thorough all the subfolders and add all the classes it finds (which also includes module2/target/classes/ClassB.class). Then it will try to load it and it will produce the error I pasted above. Now i'm not sure who's passing the master folder to the classpath, but I checked the maven classpath and I'm 100% sure it is not coming from maven. I also tried to add a filterInputsBy with a FilterBuilder.Exclude but that only allows me to filter on incoming files, and not the master folder (plus I have a project with more than 50 modules so I can't really exclude all the classes).

    Also in my case I have a project with more than 50 modules, so reflections will be really slow if it scans the master folder. I think the proper solution is not the scan the master folder at all.

    opened by ptahchiev 8
  • Bump slf4j-simple from 1.7.32 to 2.0.6

    Bump slf4j-simple from 1.7.32 to 2.0.6

    Bumps slf4j-simple from 1.7.32 to 2.0.6.

    Commits
    • 5ff6f2c prepare for release 2.0.6
    • 2f4aa75 fix SLF4J-575
    • 363f0a5 remove unused parts
    • 171679b SLF4J-574: Add full OSGi headers, especially "uses" clauses
    • 921b5b3 fix FUNDING file
    • e02244c fix FUNDING file
    • 441d458 fix FUNDING file
    • f5e741b add FUNDING file
    • 2e71327 remove unused log4j dependency in the version definition section of pom.xml
    • 3ff2a30 start work on 2.0.6-SNAPSHOT
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump slf4j-api from 1.7.32 to 2.0.6

    Bump slf4j-api from 1.7.32 to 2.0.6

    Bumps slf4j-api from 1.7.32 to 2.0.6.

    Commits
    • 5ff6f2c prepare for release 2.0.6
    • 2f4aa75 fix SLF4J-575
    • 363f0a5 remove unused parts
    • 171679b SLF4J-574: Add full OSGi headers, especially "uses" clauses
    • 921b5b3 fix FUNDING file
    • e02244c fix FUNDING file
    • 441d458 fix FUNDING file
    • f5e741b add FUNDING file
    • 2e71327 remove unused log4j dependency in the version definition section of pom.xml
    • 3ff2a30 start work on 2.0.6-SNAPSHOT
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • ConfigurationBuilder#build fails on ReflectionException if there is classLoader param

    ConfigurationBuilder#build fails on ReflectionException if there is classLoader param

    Hello, when I upgraded Reflections from 0.9.12 to 0.10.2 then my code stops working anymore. The reason is that I get ReflectionException in ConfigurationBuilder#build method when one of the parameter is a class loader.

    I compared the code and it seems like there used to be a condition else if (param instanceof ClassLoader) { /* already taken care */ }. However this condition is omitted in the new version.

    opened by dude65 1
  • Do not support users.stream().filter(User::isCool).collect(Collectors.toList()) when use reflections.getMemberUsage(method)

    Do not support users.stream().filter(User::isCool).collect(Collectors.toList()) when use reflections.getMemberUsage(method)

    biz code: public String buildWord(){ List users = new ArrayList(); List names = users.stream() //.filter(e -> e.isCool() &&e.getName().equals("")) .filter(User::isCool) .map(User::getName) .collect(Collectors.toList()); return names.toString(); }

    Reflections reflections = new Reflections(new ConfigurationBuilder() .setUrls(Collections.singletonList(ClasspathHelper.forClass(UsageTest.class))) .setScanners(new MemberUsageScanner())); Method[] methods = User.class.getDeclaredMethods(); for (Method method : methods) { Collection members = reflections.getMemberUsage(method); System.out.println("method:"+method+",members:"+members); } members return null.

    opened by jusescn 1
  • Avoid using HashSet with java.net.URL - causing significant slowdown

    Avoid using HashSet with java.net.URL - causing significant slowdown

    ConfigurationBuilder class uses HashSet with java.net.URL which causes significant application slowdown.

    public ConfigurationBuilder setUrls(Collection<URL> urls) {
    		this.urls = new HashSet<>(urls);
            return this;
    }
    

    According to https://rules.sonarsource.com/java/RSPEC-2112

    The equals and hashCode methods of java.net.URL both may trigger a name service (usually DNS) lookup to resolve the host name or IP address. Depending on the configuration, and network status, that can take a long time. URI on the other hand makes no such calls and should be used instead unless the specific URL functionality is required.

    In general it is better to use the URI class until access to the resource is actually needed, at which point you can just convert the URI to a URL using URI.toURL().

    opened by czpilar 0
Releases(0.10.2)
Owner
null
An uber-fast parallelized Java classpath scanner and module scanner.

ClassGraph ClassGraph is an uber-fast parallelized classpath scanner and module scanner for Java, Scala, Kotlin and other JVM languages. ClassGraph wo

classgraph 2.4k Dec 29, 2022
High performance Java reflection

Please use the ReflectASM discussion group for support. Overview ReflectASM is a very small Java library that provides high performance reflection by

Esoteric Software 1.4k Dec 31, 2022
Android Resource Manager application to manage and analysis your app resources with many features like image resize, Color, Dimens and code Analysis

AndroidResourceManager Cross-Platform tools to manage your resources as an Android Developer, AndroidResourceManager - ARM provide five main services

Amr Hesham 26 Nov 16, 2022
For English vocabulary analysis and sentence analysis in natural language, model trainin

Sword Come ?? For English vocabulary analysis and sentence analysis in natural language, model training, intelligent response and emotion analysis rea

James Zow 2 Apr 9, 2022
blockchain database, cata metadata query

Drill Storage Plugin for IPFS 中文 Contents Introduction Compile Install Configuration Run Introduction Minerva is a storage plugin of Drill that connec

null 145 Dec 7, 2022
Open Standard for Metadata. A Single place to Discover, Collaborate and Get your data right.

What is OpenMetadata? Try our Sandbox Install & Run Documentation and support Contributors License What is OpenMetadata? OpenMetadata is an Open Stand

null 1.8k Dec 31, 2022
Minecraft mod running on the TTCp engine to load modules written in JS at runtime - with runtime deobfuscation!

PolyFire ClickGUI opens with NUMROW_0 How to use: Run -jsmodules to initialize Navigate to your .minecraft folder Go to config/pf/modules/ Copy Exampl

Daniel H. 8 Nov 18, 2022
Inria 1.4k Dec 29, 2022
Java Statistical Analysis Tool, a Java library for Machine Learning

Java Statistical Analysis Tool JSAT is a library for quickly getting started with Machine Learning problems. It is developed in my free time, and made

null 752 Dec 20, 2022
Free and 100% open source Progressive Java Runtime for modern Java™ deployments supported by a leading OpenJDK contributor

BellSoft Liberica JDK is a build of OpenJDK that is tested and verified to be compliant with the Java SE specification using OpenJDK Technology Compat

null 195 Dec 22, 2022
ijrd - internal java runtime debugger (loads through java agents LOL)

ijrd ijrd - internal java runtime debugger (loads through java agents LOL) this actually requires brain to build and then setup little guide to setup

null 6 Jan 28, 2022
A mitigation for CVE-2021-44228 (log4shell) that works by patching the vulnerability at runtime. (Works with any vulnerable java software, tested with java 6 and newer)

Log4jPatcher A Java Agent based mitigation for Log4j2 JNDI exploits. This agent employs 2 patches: Disabling all Lookup conversions (on supported Log4

null 45 Dec 16, 2022
SpotBugs is FindBugs' successor. A tool for static analysis to look for bugs in Java code.

SpotBugs is the spiritual successor of FindBugs, carrying on from the point where it left off with support of its community. SpotBugs is licensed unde

null 2.9k Jan 4, 2023
A Java library for technical analysis.

ta4j Technical Analysis For Java Ta4j is an open source Java library for technical analysis. It provides the basic components for creation, evaluation

null 1.7k Jan 3, 2023
Lightweight analysis tool for detecting mutability in Java classes

What is Mutability Detector? Mutability Detector is designed to analyse Java classes and report on whether instances of a given class are immutable. I

Mutability Detector 234 Dec 29, 2022
Ta4j is an open source Java library for technical analysis

Ta4j is an open source Java library for technical analysis. It provides the basic components for creation, evaluation and execution of trading strategies.

null 1.7k Dec 31, 2022
Java library for parsing report files from static code analysis.

Violations Lib This is a Java library for parsing report files like static code analysis. Example of supported reports are available here. A number of

Tomas Bjerre 127 Nov 23, 2022
Code metrics for Java code by means of static analysis

CK CK calculates class-level and method-level code metrics in Java projects by means of static analysis (i.e. no need for compiled code). Currently, i

Maurício Aniche 286 Jan 4, 2023