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.5.0.jar : https://repo.maven.apache.org/maven2/org/checkerframework/annotatedlib/bcel
  wget https://repo.maven.apache.org/maven2/org/checkerframework/annotatedlib/bcel/6.5.0/bcel-6.5.0.jar

bcel-util-1.2.1.jar : https://repo.maven.apache.org/maven2/org/plumelib/bcel-util/
# Version 1.2.2 causes JarJar to crash. :(
  rm -f bcel-util-*.jar
  VER=1.2.1
  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.48.2
  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 .
If environment variable CHECKERFRAMEWORK is set, compilation uses it instead of
these .jar files in this directory.

commons-exec-1.4.0.jar : https://commons.apache.org/proper/commons-exec/
  VER=1.4.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.15.0.jar : https://commons.apache.org/proper/commons-lang/download_lang.cgi

daikon-plumelib.jar : Contains bcel-util, options, hashmap-util,
  plume-util, and reflection-util, but in package "daikon.plumelib".
PROBLEM: Pants's jarjar requires Python 2.  We should find a more modern
program like jarjar.
NOTE: you may need to install package libpython<version>-dev for jarjar to compile.
To create, run from this directory, using JDK 8:
JAVA_VER=$(java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1 | sed 's/-ea//') && \
[ "$JAVA_VER" == "8" ] && make || echo "Use Java 8 (or, maybe the build failed)"

error-prone/ : https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/
I tried to update to 2.19.1, but it required:
wget https://repo1.maven.org/maven2/com/google/inject/guice/5.1.0/guice-5.1.0.jar
and even then failed with an error. (Error Prone isn't good about keeping
the command-line installation instructions up to date.)
Instructions from https://errorprone.info/docs/installation#command-line :
(cd error-prone && \
export EP_VERSION=2.15.0 && \
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/org/checkerframework/dataflow-errorprone/3.15.0/dataflow-errorprone-3.15.0.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://search.maven.org/#search%7Cga%7C1%7Cplumelib+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.9.3.jar : https://search.maven.org/#search%7Cga%7C1%7Cplume-util
  rm plume-util-*.jar
  VER=1.9.3 && 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.3.jar : https://repo.maven.apache.org/maven2/org/plumelib/reflection-util/
  VER=1.1.3
  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-1.0.8-all.jar : https://github.com/plume-lib/require-javadoc/releases
  wget https://github.com/plume-lib/require-javadoc/releases/download/v1.0.8/require-javadoc-1.0.8-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.
