The easiest way to build and run Daikon is to put daikon.jar on your classpath.
This directory contains dependences that are put in daikon.jar.
All .jar files in this directory should contain Java 8 bytecodes,
so that Daikon will run under Java 8.

bcel-6.8.1.jar : https://repo.maven.apache.org/maven2/org/checkerframework/annotatedlib/bcel
  wget https://repo.maven.apache.org/maven2/org/checkerframework/annotatedlib/bcel/6.8.1/bcel-6.8.1.jar

bcel-util-1.2.4.jar : https://repo.maven.apache.org/maven2/org/plumelib/bcel-util/
  rm -f bcel-util-*.jar
  VER=1.2.4
  wget https://repo.maven.apache.org/maven2/org/plumelib/bcel-util/$VER/bcel-util-$VER.jar
  rm -f daikon-plumelib.jar
  When you update this, remove the old daikon-plumelib.jar then remake it.

checker-framework/ and checker-qual.jar : https://github.com/typetools/checker-framework/releases
  VER=3.52.0
  wget https://github.com/typetools/checker-framework/releases/download/checker-framework-$VER/checker-framework-$VER.zip
  unzip -q checker-framework-$VER.zip
  mv -f checker-framework-$VER/checker/dist/checker.jar checker-framework-$VER/checker/dist/javac.jar checker-framework/
  mv -f checker-framework-$VER/checker/dist/checker-qual.jar .
  rm -rf checker-framework-$VER.zip checker-framework-$VER
To install a snapshot of the current Checker Framework, run from this directory:
  (cd $CHECKERFRAMEWORK && ./gradlew assembleForJavac) && \
  cp -pf $CHECKERFRAMEWORK/checker/dist/checker.jar $CHECKERFRAMEWORK/checker/dist/javac.jar checker-framework/ && \
  cp -pf $CHECKERFRAMEWORK/checker/dist/checker-qual.jar .
When compiling Daikon, if environment variable CHECKERFRAMEWORK is set,
compilation uses it instead of these .jar files in this directory.

commons-exec-1.6.0.jar : https://commons.apache.org/proper/commons-exec/changes.html
  VER=1.6.0
  rm -f commons-exec-*.jar
  wget https://dlcdn.apache.org//commons/exec/binaries/commons-exec-$VER-bin.zip
  unzip -p commons-exec-$VER-bin.zip commons-exec-$VER/commons-exec-$VER.jar > commons-exec-$VER.jar
  rm -f commons-exec-$VER-bin.zip

commons-lang3-3.20.0.jar : https://commons.apache.org/proper/commons-lang/download_lang.cgi
  VER=3.20.0
  rm -f commons-lang3-*.jar
  wget https://dlcdn.apache.org//commons/lang/binaries/commons-lang3-$VER-bin.zip
  unzip -p commons-lang3-$VER-bin.zip commons-lang3-$VER/commons-lang3-$VER.jar > commons-lang3-$VER.jar
  rm -f commons-lang3-$VER-bin.zip

daikon-plumelib.jar : Contains bcel-util, options, hashmap-util,
  plume-util, and reflection-util, but in package "daikon.plumelib".
  # Note that you must be using JDK17+ and gradle 8.11+.
  # First, adjust version numbers in file `build.gradle`.  (TODO: make that unnecessary.)
  gradle shadowJar
  mv -f build/libs/daikon-plumelib.jar .
  rm -rf build

error-prone/ : https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/
Instructions from https://errorprone.info/docs/installation#command-line :
(cd error-prone && \
export EP_VERSION=2.46.0 && \
export DATAFLOW_EP_VERSION=3.49.3 && \
wget -N https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/${EP_VERSION?}/error_prone_core-${EP_VERSION?}-with-dependencies.jar && \
wget -N https://repo1.maven.org/maven2/io/github/eisop/dataflow-errorprone/${DATAFLOW_EP_VERSION}-eisop1/dataflow-errorprone-${DATAFLOW_EP_VERSION}-eisop1.jar)
# Older: wget -N https://repo1.maven.org/maven2/org/checkerframework/dataflow-errorprone/${DATAFLOW_EP_VERSION}/dataflow-errorprone-${DATAFLOW_EP_VERSION}.jar
Also, update the version number in java/Makefile .

hashmap-util-0.0.1.jar : https://central.sonatype.com/search?q=hashmap-util
  wget https://repo.maven.apache.org/maven2/org/plumelib/hashmap-util/0.0.1/hashmap-util-0.0.1.jar
  When you update this, remove the old daikon-plumelib.jar then remake it.

java-getopt-1.0.14.0.1.jar : https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.checkerframework.annotatedlib%22%20a%3A%22java-getopt%22
  wget https://repo.maven.apache.org/maven2/org/checkerframework/annotatedlib/java-getopt/1.0.14.0.1/java-getopt-1.0.14.0.1.jar

junit-4.13.2-Daikon.jar : https://github.com/junit-team/junit4/releases
This is our Java 8 recompilation of the JUnit 4 release version of junit-4.13.2.jar.
The release version contains Java 5 bytecodes. When a program that uses JUnit is processed by DynComp
it produces lots of warnings about the use of old bytes codes. More importantly, the Java 5 bytecodes
generated for try-finally statements confuse the BCEL bytecode verifier and it reports a fatal error.
Note that if a user wishes to use the release version of JUnit, or any other version of JUnit, they
can simply put it on their class path prior to daikon.jar and/or daikon/java/lib/*.  To create this
file clone git@github.com:typetools/junit4.git and follow the instructions in README-typetools.txt.

junit-platform-console-standalone-1.9.0-Daikon.jar: This is our Java 8 recompilation of the JUnit 5
release version of junit-platform-console-standalone-1.9.0.jar.  To create this file
clone git@github.com:typetools/junit5.git and follow the instructions in README-typetools.txt.

hamcrest-core.1.3-Daikon.jar : https://search.maven.org/artifact/org.hamcrest/hamcrest
This is our Java 8 recompilation of the release version of
hamcrest-core.1.3.jar. hamcrest-core.1.3.jar has the same issue as junit-4.13.2.jar.
See the file README.hamcrest for details on how to create hamcrest-core.1.3-Daikon.jar.

options-1.0.6.jar : https://central.sonatype.com/artifact/org.plumelib/options
  Options version 2 requires Java 11.
  wget https://repo.maven.apache.org/maven2/org/plumelib/options/1.0.6/options-1.0.6.jar
  When you update this, remove the old daikon-plumelib.jar then remake it (see above).

plume-util-1.14.0.jar : https://central.sonatype.com/artifact/org.plumelib/plume-util/versions
  rm plume-util-*.jar
  VER=1.14.0 && wget https://repo.maven.apache.org/maven2/org/plumelib/plume-util/${VER}/plume-util-${VER}.jar
  rm -f daikon-plumelib.jar
  When you update this, remove the old daikon-plumelib.jar then remake it.

reflection-util-1.1.5.jar : https://repo.maven.apache.org/maven2/org/plumelib/reflection-util/
  VER=1.1.5
  rm reflection-util-*.jar
  wget https://repo.maven.apache.org/maven2/org/plumelib/reflection-util/$VER/reflection-util-$VER.jar
  rm -f daikon-plumelib.jar
  When you update this, remove the old daikon-plumelib.jar then remake it.

require-javadoc-2.0.0-all.jar : https://github.com/plume-lib/require-javadoc/releases
  # This is in a subdirectory so that it is not on the run-time classpath.
  cd require-javadoc
  wget https://github.com/plume-lib/require-javadoc/releases/download/v2.0.0/require-javadoc-2.0.0-all.jar

---------------------------------------------------------------------------

Motivation for daikon-plumelib.jar:
The daikon.plumelib classes are used only by the run-time support for
instrumentation tools (that is, anything that might run in the same JVM as
a target program), namely Chicory and DynComp.  All other parts of Daikon
use the standard plume-lib jar files.
Suppose that both DynComp and the target program both used plume-lib.
If DynComp instrumented plume-lib, then an infinite recursion would
result; if DynComp did not instrument plume-lib, then DynComp would
miss some computations of the target program.  Thus, DynComp needs to
be completely separate from the target program -- they should share no
code.  To enable DynComp to work properly on a program that uses
plume-lib, DynComp must not use plume-lib.  Therefore, DynComp uses a
renamed version of plume-lib that is not used by any other program,
including Daikon itself.  DynComp can instrument the plume package,
but it does not instrument daikon.plumelib.
