Java Constraint Programming solver

Related tags

Utility jacop
Overview

https://maven-badges.herokuapp.com/maven-central/org.jacop/jacop/badge.svg

[Maven Central] (https://maven-badges.herokuapp.com/maven-central/org.jacop/jacop/)

JaCoP

Java Constraint Programming (JaCoP) solver

JaCoP solver is Java-based open source solver developed and maintained mainly by two people

  • Krzysztof Kuchcinski, Dept. of Computer Science, Lund University, Sweden.
  • Radoslaw Szymanek - LeShop.ch, Switzerland.

Moreover a number of students have contributed to the solver by programming first versions of different global constraints and set constraints. The solver is being used in academia for research and teaching as well as in industry for commercial purposes. The most successful use of the solver is within Electronic Design Automation community, since both main authors come from that community.

JaCoP provides a significant number of constraints to facilitate modeling as well as modular design of search. This allows to tailor search to characteristics of the problem being addressed. It has currently more than 90,000 lines of code, not including examples and testing code. The examples which are the preferred way to document the abilities of JaCoP have more than 20.000 lines of code. The core developers have been working on JaCoP for past 10 years during their free time as a hobby activity. It has been refactored, transformed, and improved many times. Initial versions of JaCoP were even 3 orders of magnitude slower than the current version. JaCoP implementation has been influenced heavily by more than 20 research articles. Moreover, JaCoP was used as a tool to conduct experiments for CP publications. JaCoP supports finite domains of integers and sets of integers.

The major focus of JaCoP are its constraints. These constraints include rich set of primitive, logical, and conditional constraints as well as many global constraints. The most important global constraints are as follows.

  • diff2,
  • cumulative,
  • alldifferent,
  • gcc,
  • extensional support (with three different state-of-the-art approaches)and extensional conflict,
  • among,
  • element,
  • circuit,
  • knapsack,
  • regular,
  • netflow, and
  • geost.

JaCoP solver contains also front-end for FlatZinc language that makes it possible to execute MiniZinc models. It allows us to perform extensive testing with the help of other solvers as we can compare results from different solvers.

JaCoP is an ongoing activity. We are working on it in our free time. The most recent addition is Scala based DSL so it is easier to create your own constraint programs even in more intuitive manner.

JaCoP is also available from maven repository. For details, please check INSTALL file.

Contributions

We can only accept contributions (pull/merge requests) with signed Contributions License Agreement. Please read the document CLA_JaCoP in doc directory. Please use the checkstyle provided also in doc directory. Please make pull/merge requests only to develop branch. We do not accept other pull requests.

Installation Guide

The easiest way to make jar file for JaCoP is to use maven. First, install maven on your computer and then write

mvn install -DskipTests

The jar file will be generated into directory jacop/target.

Compilation of JaCoP can be easily done by issuing the following command

mvn compile

Generation of Java API documentation

mvn javadoc:javadoc

Generation of Scala formatted API documentation for Java and Scala

mvn scala:doc

Installation using Maven

To use JaCoP with maven you can just include it as a dependency in your pom.xml

<dependency>
    <groupId>org.jacop</groupId>
    <artifactId>jacop</artifactId>
    <version>4.7.0</version>
</dependency>

From the version 4.4.0, JaCoP is uploaded to Maven Central so the above is the only thing you need to do.

For older versions of JaCoP (4.3 and older) you also need to add the following information about CSLTH Maven repository to your pom.xml as well

<repositories>
	<repository>
		<id>CSLTH</id>
		<name>CS LTH maven repo</name>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
		</snapshots>
		<url>http://maven.cs.lth.se/content/repositories/public/</url>
	</repository>
</repositories>

Getting started

Probably the easiest way to start is to clone this repo. Afterwards, open the Maven project in IDE like Intelij IDEA and run examples available in directory $PATH_TO_GIT_REPO\src\main\java\org\jacop\examples.

Afterwards, you can copy parts of the provided examples into your own project add JaCoP maven dependency and start writing your own constraint programming examples.

LICENSE

It is provided in a separate file LICENSE.md. We can also provide JaCoP under different commercial license if open source license is not appropriate for your usage.

Comments
  • Infeasible LinearInt constraints on singleton variables are not imposed

    Infeasible LinearInt constraints on singleton variables are not imposed

    Hi,

    If you create a new LinearInt constraint by passing it a list of singleton variables that do not add up to the right-hand-side constant, then the constraint is incorrectly not imposed, and the store incorrectly claims to be consistent.

    The issue is in commonInitialization(), which collapses all singleton variables into the right-hand-side constant b, which can result in the list of variables x becoming empty, and then impose() returns without imposing the constraint, even though it is violated because b != 0.

    Best,

    Thomas

    opened by thomasleaute 9
  • Can't compile repo

    Can't compile repo

    Hi , when I try to compile the git hub repo, I get lots of errors like these:

    • ASTSolveItem cannot be resolved to a type Solve.java /jacop/src/main/java/org/jacop/fz line 126 Java Problem
    • JJTANNEXPR cannot be resolved to a variable SearchItem.java /jacop/src/main/java/org/jacop/fz line 119 Java Problem

    These types seem indeed to be mssing in the repo.

    There are other problems related to warning settings:

    • The field Diff2.xmlAttributes is hiding a field from type Diff Diff2.java /jacop/src/main/java/org/jacop/constraints line 67 Java Problem
    • override annotation missing

    Although I could change my settings in eclipse to get rid of these, I wonder if it would not be better to fix these problems in the repo/source since they reflect recommended programming guidelines

    Thanks for this great work !

    opened by vittali 6
  • Git tags for releases

    Git tags for releases

    Could you please publish git tags for releases? They seem to be missing for all releases except 4.0.0.

    This would be helpful for me since I use JaCoP to test and benchmark ExtendJ, and I'd like to test it on all released versions of JaCoP.

    opened by llbit 5
  • Maven repository

    Maven repository

    As far as I can see, there is not "official" maven repository of JaCoP, but this one:

    <dependency>
        <groupId>de.sciss</groupId>
        <artifactId>jacop</artifactId>
        <version>3.4.0</version>
    </dependency>
    

    See http://mvnrepository.com/artifact/de.sciss/jacop.

    Could you place your library into maven, please?

    Thanks for your work :+1:

    opened by russellhoff 5
  • Infinite recursion in DepthFirstSearch

    Infinite recursion in DepthFirstSearch

    In some situations, I'm having the problem that DepthFirstSearch causes a StackOverflowError due to an infinite recursion:

    Exception in thread "main" java.lang.StackOverflowError
        at org.jacop.search.DepthFirstSearch.label(DepthFirstSearch.java:559)
        at org.jacop.search.DepthFirstSearch.label(DepthFirstSearch.java:765)
        at org.jacop.search.DepthFirstSearch.label(DepthFirstSearch.java:765)
        at org.jacop.search.DepthFirstSearch.label(DepthFirstSearch.java:765)
        // and so on...
    

    I'd like to debug this, to find out whether this is a problem with my own code or a bug in JaCoP, but I don't know what information is useful to you. If you could guide me with this, that'd be great!

    Edit: This is on JaCoP 4.3.0, as provided in the Maven repository (see #12).

    opened by lehnerpat 4
  • Changes for a jacop Fedora package

    Changes for a jacop Fedora package

    Hi, I did build a scratch jacop package. You can see build and logs at http://koji.fedoraproject.org/koji/taskinfo?taskID=8450365 You can see the rpm spec at https://pcpa.fedorapeople.org/jacop.spec

    I would like to ask for a LICENSE file inclusion in the sources. Also, if would be good if you could provide an official release tarball.

    This is partly for my work on packaging ampl/mp https://github.com/ampl/mp/issues/19

    opened by pcpa 4
  • MagicSeries, Among, two solutions?

    MagicSeries, Among, two solutions?

    When modeling the MagicSeries questions using Among JaCoP returns two solutions. However, it should only be one. Solution 2 seems to be wrong as the 1 appears twice.

    Solution 1: 6 2 1 0 0 0 1 0 0 0 
    Solution 2: 7 1 0 0 0 0 0 1 0 0 
    

    Sample Code run with JaCoP 4.1 as well as 3.2

        int n = 9;
        Store store = new Store();
        IntVar[] vars = new IntVar[n+1];
        for (int i=0; i < vars.length; i++) {
            vars[i] = new IntVar(store, "H"+i, 0, n);
        }
        for (int i=0; i < vars.length; i++) {
            store.impose(new Among(vars, new IntervalDomain(i, i), vars[i]));
        }
        Search<IntVar> search = new DepthFirstSearch<IntVar>();
        search.setPrintInfo(false);
        SelectChoicePoint<IntVar> select =
            new InputOrderSelect<IntVar>(store, vars, 
                                         new IndomainMin<IntVar>());
        search.getSolutionListener().searchAll(true);
        search.getSolutionListener().recordSolutions(true);
        search.labeling(store, select);
        int numSolutions = search.getSolutionListener().solutionsNo();
        for (int i=1; i <= numSolutions; i++) { 
            System.out.print("Solution " + i + ": "); 
            for (int j=0; j<search.getSolution(i).length; j++) 
                System.out.print(search.getSolution(i)[j] + " "); 
            System.out.println(); 
        } 
    
    opened by hesrerem 4
  • Please make Arithmetic's fields protected instead of private

    Please make Arithmetic's fields protected instead of private

    Hi,

    Can you please make the following fields of the Arithmetic constraint protected instead of private? I would like to subclass this class but not having access to these fields makes it impossible.

        private List<int[]> eqns;
        private List<IntVar> vars;
        private Map<IntVar, Integer> map;
    

    Thanks in advance!

    opened by thomasleaute 3
  • XneqC constraints are dropped silently

    XneqC constraints are dropped silently

    JaCoP 4.6.0

    When an XneqC constraint is imposed on an IntVar with a BoundDomain, it can happen that the constraint is ignored and dropped, i.e. not considered in later consistency checks. This does not happen right away, but on the first consistency check.

    Observed behaviour Consider an IntVar x with a BoundDomain in {-500; 500}. Now impose XneqC(x, 0). The first check of consistency brings us here https://github.com/radsz/jacop/blob/abe1e146e4661c8a6975c4607a84d21039b0fc82/src/main/java/org/jacop/constraints/XneqC.java#L80-L82

    which delegates to

    https://github.com/radsz/jacop/blob/abe1e146e4661c8a6975c4607a84d21039b0fc82/src/main/java/org/jacop/core/BoundDomain.java#L350-L357

    which disregards the complement and just leaves the domain unchanged; but to make things worse, the XneqC is also never considered on later changes to X. It seems that the constraint is dropped.

    Expected behaviour Modify the BoundDomain, or keep consulting the constraint when changes to the domain of X are made later. If all else fails, give a clear indication (runtime exception?) about the fact that this operation has failed.

    Workaround Use an IntervalDomain instead of the BoundDomain – this circumvents the described problem, but I am not sure about the effect on other operations...

    opened by Dagefoerde 3
  • Incorrect set_le / set_lt implementation

    Incorrect set_le / set_lt implementation

    We were made aware aware by a MiniZinc user that set_le and set_lt are working incorrectly within the JaCoP solver: https://github.com/MiniZinc/libminizinc/issues/185

    The following FlatZinc model returns incorrectly as unsatisfiable:

    var set of 1..10: a ::output_var = {8};
    var set of 1..10: b ::output_var = {7, 8, 9};
    
    constraint set_le(a, b);
    
    solve  satisfy;
    

    Similarly for constraint set_lt(a, b);

    opened by Dekker1 3
  • Change request to the signature of constructor Channel(IntVar x, Map<Integer,IntVar> bs)

    Change request to the signature of constructor Channel(IntVar x, Map bs)

    Please change the signature of the Channel constructor from

    Channel(IntVar x, Map<Integer,IntVar> bs)  
    

    to

    Channel(IntVar x, Map<Integer,? extends IntVar> bs)
    

    This would make it possible to use the Channel constraint with variables that are expressed as subclasses of IntVar.

    opened by thomasleaute 2
  • Bump scala-library from 2.13.1 to 2.13.9

    Bump scala-library from 2.13.1 to 2.13.9

    Bumps scala-library from 2.13.1 to 2.13.9.

    Release notes

    Sourced from scala-library's releases.

    Scala 2.13.9

    The following changes are highlights of this release:

    Compatibility with Scala 3

    • Tasty Reader: Add support for Scala 3.2 (#10068)
    • Tasty Reader: Restrict access to experimental definitions (#10020)
    • To aid cross-building, accept and ignore using in method calls (#10064 by @​som-snytt)
    • To aid cross-building, allow ? as a wildcard even without -Xsource:3 (#9990)
    • Make Scala-3-style implicit resolution explicitly opt-in rather than bundled in -Xsource:3 (#10012 by @​povder)
    • Prefer type of overridden member when inferring (under -Xsource:3) (#9891 by @​som-snytt)

    JDK version support

    Warnings and lints

    • Add -Wnonunit-statement to warn about discarded values in statement position (#9893 by @​som-snytt)
    • Make unused-import warnings easier to silence (support filtering by origin=) (#9939 by @​som-snytt)
    • Add -Wperformance lints for *Ref boxing and nonlocal return (#9889 by @​som-snytt)

    Language improvements

    • Improve support for Unicode supplementary characters in identifiers and string interpolation (#9805 by @​som-snytt)

    Compiler options

    Security

    • Error on source files with Unicode directional formatting characters (#10017)
    • Prevent Function0 execution during LazyList deserialization (#10118)

    Bugfixes

    • Emit all bridge methods non-final (perhaps affecting serialization compat) (#9976)
    • Fix null-pointer regression in Vector#prependedAll and Vector#appendedAll (#9983)
    • Improve concurrent behavior of Java ConcurrentMap wrapper (#10027 by @​igabaydulin)
    • Preserve null policy in wrapped Java Maps (#10129 by @​som-snytt)

    Changes that shipped in Scala 2.12.16 and 2.12.17 are also included in this release.

    For the complete 2.13.9 change lists, see all merged PRs and all closed bugs.

    Compatibility

    ... (truncated)

    Commits
    • 986dcc1 Merge pull request #10129 from som-snytt/followup/12586-preserve-NPE
    • b824b84 Preserve null policy in wrapped Java Map
    • d578a02 Merge pull request #10128 from SethTisue/revert-10114-10123
    • e5fe919 Revert "Args files are 1 arg per line, fix -Vprint-args -"
    • 362c5d1 Revert "Trim and filter empties in arg files"
    • 864148d Revert "process.Parser strips escaping backslash"
    • f69fe8b Merge pull request #10127 from scalacenter/tasty/support-3.2.0-final
    • 0aa6bd4 remove tasty escape hatch for 3.2.0-RC4
    • af56abc Merge pull request #10123 from som-snytt/dev/814-window-cmd-escapes
    • 7e844a5 Merge pull request #10121 from scala-steward/update/slf4j-nop-2.0.0
    • 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)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Change request to signatures of Decreasing & Increasing constructors

    Change request to signatures of Decreasing & Increasing constructors

    Please change the signature of the Decreasing constructor from

    public Decreasing(List<IntVar> x)

    to

    public Decreasing(List<? extends IntVar> x)

    This would make it possible to use the Decreasing constraint with variables that are expressed as subclasses of IntVar.

    The same applies to the following constructors:

    public Decreasing(List<IntVar> x, boolean strict) public Increasing(List<IntVar> x) public Increasing(List<IntVar> x, boolean strict)

    opened by thomasleaute 0
  • Improve MAVEN build Performance

    Improve MAVEN build Performance

    That report generation takes time, slowing down the overall build. Reports are definitely useful, but do you need them every time you run the build. We can conditionally disable generating test reports by setting <disableXmlReport>true<disableXmlReport>. If you need to generate reports, just add -DcloseTestReports=false to the end of mvn build command.

    ===================== If there are any inappropriate modifications in this PR, please give me a reply and I will change them.

    opened by hongdongni 0
  • SoftAllDifferent and SoftGCC incorrectly throw AssertionErrors on infeasible stores

    SoftAllDifferent and SoftGCC incorrectly throw AssertionErrors on infeasible stores

    The following code:

    Store store = new Store ();
    		
    // Create the variables
    IntVar cost = new IntVar (store, "cost", 0, 2);
    IntVar[] vars = new IntVar [2];
    vars[0] = new IntVar (store, "v_0", 0, 1);
    vars[1] = new IntVar (store, "v_1", 0, 1);
    
    // Ground the variables using In constraints, such that the store is infeasible
    store.impose(new In (cost, new IntervalDomain (0, 0)));
    store.impose(new In (vars[0], new IntervalDomain (0, 0)));
    store.impose(new In (vars[1], new IntervalDomain (0, 0)));
    		
    // Impose a SoftAlldifferent constraint
    store.imposeDecomposition(new SoftAlldifferent (vars, cost, ViolationMeasure.DECOMPOSITION_BASED));
    		
    System.out.println(store.consistency());
    
    

    throws

    Exception in thread "main" java.lang.AssertionError: non-optimal arcs:
    [1->sink, flow=0/1  reduced=-1, index=2]
    	at org.jacop.constraints.netflow.Assert.checkOptimality(Assert.java:269)
    	at org.jacop.constraints.netflow.simplex.NetworkSimplex.networkSimplex(NetworkSimplex.java:368)
    	at org.jacop.constraints.netflow.NetworkFlow.consistency(NetworkFlow.java:255)
    	at org.jacop.core.Store.consistency(Store.java:547)
    
    

    when asserts are enabled.

    opened by thomasleaute 1
  • AmongVar.impose() handles already grounded variables incorrectly

    AmongVar.impose() handles already grounded variables incorrectly

    AmongVar.impose() initializes xGrounded to the number of X variables already grounded, but then calls super.impose(store), which itself calls AmongVar.queueVariable(), which again increments xGrounded for each singleton variable, resulting in each grounded variable being incorrectly counted twice.

    Suggested bug fix: in AmongVar.impose(), initialize xGrounded to 0 (like is already done with yGrounded) instead of to the number of grounded variables.

    opened by thomasleaute 0
  • 4.6 :`RegularExpressionParser` is broken

    4.6 :`RegularExpressionParser` is broken

    Concerns : JaCoP 4.6 (Java 11).

    I spotted a few issues in the code of the RegularExpressionParser class introduced in 4.6.

    • (this one is fixed in the enclosed patched file) the class is unusable since the result of lexer.nextToken() is never used. As a consequence of that, any call to parse yields 'null'.
    • The dot notation parsing is flaky. For instance, the following two examples relate toi the handling of epsilon expressions but are not orthogonal to one another.
    // Prints "null.(32)*"
    System.out.println(new PatchedRegexParser(new StringReader("(.32*)")).parse(false));
    
    // Warns of a syntax error then prints "32.(null).*"
    System.out.println(new PatchedRegexParser(new StringReader("(32.*)")).parse(false));
    
    • In some cases (ie when a dot is missing) the parser silently drops a whole portion of the text to parse. For example, consider the following example:
    // Prints "(17)*.23" and nothing more.
    System.out.println(new PatchedRegexParser(new StringReader("(32.14*)17*.23")).parse(false));
    

    Btw, I wonder if reusing the . and + symbols for summation and concatenation was judicious. Indeed, these symbols have different meaning in POSIX-style regexes (and I assume most people would expect that meaning)

    PatchedRegexParser.java.txt

    opened by xgillard 0
Releases(4.9.0)
  • v4.8.0(May 4, 2021)

  • v4.0.0(Jan 16, 2014)

    Version 4.0.0

    1. Maven support and new directory structure. The package has changed name from JaCoP to org.jacop and files are placed in the new directory structure.
    2. Experimental feature - stochastic variables and constraints - is moved to feature branch as it still requires additional testing. It is excluded from this release, but we encourage contribution in this branch (examples/tests in particular) to help us make it quicker a part of the next release.
    3. Experimental feature SAT solver - JaSAT - is moved to experimental feature branch as its performance and integration with JaCoP still requires extra work. It is excluded from this release, but we encourage contribution in this branch to help us make it quicker a part of the next release.
    4. Adding constraint SumWeightDom that implements domain consistency for weighted sum of linear terms.
    5. New primitive constraint Linear and its use in flatzinc.
    6. New global constraint Subcircuit.
    7. Adding additional propagation to Min and Max constraint. It propagates in situations when one variable on the list is lowest (greatest). It enforces that this variable from the list is equal min (max) variable.
    8. Print of statistics for flatzinc (org.jacop.fz.Fz2jacop) after Ctrl-C.
    9. Updated JaCoP guide to reflect new features.
    10. Bug fixes.
    Source code(tar.gz)
    Source code(zip)
    jacop-4.0.0.jar(1.49 MB)
Owner
null
An open-source Java library for Constraint Programming

Documentation, Support and Issues Contributing Download and installation Choco-solver is an open-source Java library for Constraint Programming. Curre

null 607 Jan 3, 2023
Car-Sequencing-Problem - Car-Sequencing Problem solved with Constraint Programming approach

Car-Sequencing problem solved with Constraint Programming : Problem Description : Cars in a production line can be configured with various options. A

Anas OUBAHA 4 Sep 7, 2022
The CSES Problem Set is a collection of algorithmic programming problems.

The CSES Problem Set is a collection of algorithmic programming problems. The goal of the project is to create a comprehensive high quality problem se

Mohd Abdul Azeem 1 Jan 5, 2022
Java lib for monitoring directories or individual files via java.nio.file.WatchService

ch.vorburger.fswatch Java lib for monitoring directories or individual files based on the java.nio.file.WatchService. Usage Get it from Maven Central

Michael Vorburger ⛑️ 21 Jan 7, 2022
Tencent Kona JDK11 is a no-cost, production-ready distribution of the Open Java Development Kit (OpenJDK), Long-Term Support(LTS) with quarterly updates. Tencent Kona JDK11 is certified as compatible with the Java SE standard.

Tencent Kona JDK11 Tencent Kona JDK11 is a no-cost, production-ready distribution of the Open Java Development Kit (OpenJDK), Long-Term Support(LTS) w

Tencent 268 Dec 16, 2022
This repository contains Java programs to become zero to hero in Java.

This repository contains Java programs to become zero to hero in Java. Data Structure programs topic wise are also present to learn data structure problem solving in Java. Programs related to each and every concep are present from easy to intermidiate level

Sahil Batra 15 Oct 9, 2022
Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas

Arthas Arthas is a Java Diagnostic tool open sourced by Alibaba. Arthas allows developers to troubleshoot production issues for Java applications with

Alibaba 31.5k Jan 4, 2023
Java rate limiting library based on token/leaky-bucket algorithm.

Java rate-limiting library based on token-bucket algorithm. Advantages of Bucket4j Implemented on top of ideas of well known algorithm, which are by d

Vladimir Bukhtoyarov 1.7k Jan 8, 2023
Object-Oriented Java primitives, as an alternative to Google Guava and Apache Commons

Project architect: @victornoel ATTENTION: We're still in a very early alpha version, the API may and will change frequently. Please, use it at your ow

Yegor Bugayenko 691 Dec 27, 2022
Dex : The Data Explorer -- A data visualization tool written in Java/Groovy/JavaFX capable of powerful ETL and publishing web visualizations.

Dex Dex : The data explorer is a powerful tool for data science. It is written in Groovy and Java on top of JavaFX and offers the ability to: Read in

Patrick Martin 1.3k Jan 8, 2023
Google core libraries for Java

Guava: Google Core Libraries for Java Guava is a set of core Java libraries from Google that includes new collection types (such as multimap and multi

Google 46.5k Jan 1, 2023
Java regular expressions made easy.

JavaVerbalExpressions VerbalExpressions is a Java library that helps to construct difficult regular expressions. Getting Started Maven Dependency: <de

null 2.6k Dec 30, 2022
MinIO Client SDK for Java

MinIO Java SDK for Amazon S3 Compatible Cloud Storage MinIO Java SDK is Simple Storage Service (aka S3) client to perform bucket and object operations

High Performance, Kubernetes Native Object Storage 787 Jan 3, 2023
java port of Underscore.js

underscore-java Requirements Java 1.8 and later or Java 11. Installation Include the following in your pom.xml for Maven: <dependencies> <dependency

Valentyn Kolesnikov 411 Dec 6, 2022
(cross-platform) Java Version Manager

jabba Java Version Manager inspired by nvm (Node.js). Written in Go. The goal is to provide unified pain-free experience of installing (and switching

Stanley Shyiko 2.5k Jan 9, 2023
Manage your Java environment

Master your Java Environment with jenv Website : http://www.jenv.be Maintainers : Gildas Cuisinier Future maintainer in discussion: Benjamin Berman As

jEnv 4.6k Dec 30, 2022
The shell for the Java Platform

______ .~ ~. |`````````, .'. ..'''' | | | |'''|''''' .''```. .'' |_________| |

CRaSH Repositories 916 Dec 30, 2022
Hashids algorithm v1.0.0 implementation in Java

Hashids.java A small Java class to generate YouTube-like hashes from one or many numbers. Ported from javascript hashids.js by Ivan Akimov What is it?

CELLA 944 Jan 5, 2023
a pug implementation written in Java (formerly known as jade)

Attention: jade4j is now pug4j In alignment with the javascript template engine we renamed jade4j to pug4j. You will find it under https://github.com/

neuland - Büro für Informatik 700 Oct 16, 2022