do-like-javac
(or dljc for short) is a tool for monitoring the build process of
a Java project and recording information about what parameters were passed to javac
for the purpose of later analysis. It can also automate the running of various
analysis tools, including:
do-like-javac
supports projects built with:
- Apache Ant
- Apache Maven
- Gradle
- Manual invocation of
javac
- Python 2.7
That's it. No other external dependencies for the core do-like-javac
scripts.
Of course, you will also need to have installed:
- The analysis tool(s) you want to run.
- Any build dependencies of the project you're analyzing.
do-like-javac
was built and tested on Mac OS X and GNU/Linux. It probably also
works on Microsoft Windows, but the method of invocation is probably different and
we provide no support.
git clone https://github.com/SRI-CSL/do-like-javac.git
Then symlink the dljc
executable to somewhere in your $PATH, e.g.
ln -s /path/to/dljc $HOME/bin/dljc
First, make sure your project is in a clean state (e.g. via ant clean
, mvn clean
, etc.).
Since do-like-javac
monitors the build process and build tools skip already-built files, if
you run dljc
on an already-built project, you won't get any results.
Next, invoke dljc
from the directory of the project you want to analyze:
dljc -o logs -- ant build
Where "ant build" is replaced by whatever command builds your project. Output will be emitted to logs/toplevel.log
You may also run one or more checking tools on the discovered java files, by invoking with the -t option and a comma separated list of tools to use (e.g. "-t print", "-t randoop" or "-t print,randoop").
do-like-javac
can only extract data from a full compile of a project. That means
if you want to re-run it with new arguments or different analysis tools, you will
have to clean and fully re-compile your project. To save time and shortcut this
process, we save a cache of the results in the output directory. If you want dljc
to use this cache, simply add the --cache
flag and the cache (if available) will
be used instead of recompiling your project.
IMPORTANT NOTE: We don't do any sort of cache invalidation or freshness checking.
If you add new files to your project and want dljc
to pick up on them, you will have
to do a full clean and run dljc
without the --cache
flag.
The print tool (dljc -t print
) will pretty-print the detected javac
commands, as well as any generated JAR files, and their entry points if applicable.
The Bixie tool will run your project through Bixie. You must specify a path to the Bixie jar file with the --bixie-jar
argument, e.g.
dljc --bixie-jar path/to/bixie.jar -t bixie -- mvn compile
No special arguments are required to run Randoop. In fact, Randoop itself is not a prequisite. Invoking dljc -t randoop
will automatically download any necessary dependencies and create a script (or scripts) named something like "run_randoop_0001.sh", which you can then run to run randoop on your code.
Parts of the code in this directory were taken from the Facebook Infer project. Its license is available at