Open-science repository containing our experiments about automatic specialization of third-party dependencies using DepTrim.
This repository is organized as follows:
- pipeline contains the data collection pipeline.
- notebooks contains the R notebooks used analyze the results obtained with the pipeline.
- dataset contains part of the dataset of third party dependencies that we filtered to select the study subjects for experiments.
To run the automatic data collection pipeline, you need the following installed:
- OpenJDK v17 or above
- Maven v3.8.4 or above
- DepClean v2.0.4 or above
- DepTrim v0.1.1 or above
Execute the run_pipeline.sh script.
This will create a directory named results
with 30 subdirectories, each representing the result for a Java project.
For example, for the project java-faker, the results/java-faker
directory contains the following files:
├── depclean # This directory contains the results of running DepClean with the original POM.
│ ├── depclean.log # DepClean execution logs.
│ └── pom-debloated # This directory contains the results when building with `pom-debloate.xml`.
│ ├── all-dependencies # This directory contains all the JAR files of the analyzed dependencies.
│ │ ├── automaton-1.11-8.jar
│ │ ├── byte-buddy-1.9.3.jar
│ │ ├── byte-buddy-agent-1.9.3.jar
│ │ ├── commons-lang3-3.5.jar
│ │ ├── commons-validator-1.6.jar
│ │ ├── generex-1.0.2.jar
│ │ ├── guava-20.0.jar
│ │ ├── hamcrest-core-1.3.jar
│ │ ├── hamcrest-library-1.3.jar
│ │ ├── javassist-3.21.0-GA.jar
│ │ ├── junit-4.12.jar
│ │ ├── mockito-core-2.23.4.jar
│ │ ├── objenesis-2.6.jar
│ │ ├── reflections-0.9.11.jar
│ │ ├── slf4j-api-1.7.25.jar
│ │ ├── slf4j-simple-1.7.25.jar
│ │ └── snakeyaml-1.26-android.jar
│ ├── all-dependencies.log # Maven dependecies:copy-dependency logs.
│ ├── javafaker-1.0.3-SNAPSHOT.jar # Maven build JAR file of the project.
│ ├── maven.log # Maven build logs when using pom-debloated.xml.
│ └── pom-debloated.xml # The debloated POM generated by DepClean.
├── deptrim # This directory contains the results of running DepTrim.
│ ├── deptrim.log # DepTrim execution log with parameter `createSinglePomSpecialized`.
│ ├── libs-specialized # This directory contains the JAR files of all the specialized dependencies.
│ │ ├── automaton-1.11-8.jar
│ │ ├── commons-lang3-3.5.jar
│ │ ├── generex-1.0.2.jar
│ │ └── snakeyaml-1.26-android.jar
│ ├── pom-specialized # This directory contains the results when building with `pom-specialized.xml`.
│ │ ├── dependency-tree.log # Maven dependency tree.
│ │ ├── javafaker-1.0.3-SNAPSHOT.jar # Maven build JAR file of the project.
│ │ ├── maven.log # Maven build execution log when running with `pom-specialized.xml`.
│ │ └── pom-specialized.xml # The POM with all the specialized dependencies.
│ ├── pom-specialized_1_4 # This directory contains the Maven build results when using a pom file with 1 specialized dependency.
│ │ ├── dependency-tree.log
│ │ ├── javafaker-1.0.3-SNAPSHOT.jar
│ │ ├── maven.log
│ │ └── pom-specialized_1_4.xml
│ ├── pom-specialized_2_4 # This directory contains the Maven build results when using a pom file with 2 specialized dependency.
│ │ ├── dependency-tree.log
│ │ ├── javafaker-1.0.3-SNAPSHOT.jar
│ │ ├── maven.log
│ │ └── pom-specialized_2_4.xml
│ ├── pom-specialized_3_4 # This directory contains the Maven build results when using a pom file with 3 specialized dependency.
│ │ ├── dependency-tree.log
│ │ ├── javafaker-1.0.3-SNAPSHOT.jar
│ │ ├── maven.log
│ │ └── pom-specialized_3_4.xml
│ └── pom-specialized_4_4 # This directory contains the Maven build results when using a pom file with 4 specialized dependency.
│ ├── dependency-tree.log
│ ├── javafaker-1.0.3-SNAPSHOT.jar
│ ├── maven.log
│ └── pom-specialized_4_4.xml
├── deptrim.log
├── original # This directory contains the results of the original building the original project.
│ ├── all-dependencies # This directory contains all the JAR files of all the dependencies.
│ │ └── dependency
│ │ ├── automaton-1.11-8.jar
│ │ ├── byte-buddy-1.9.3.jar
│ │ ├── byte-buddy-agent-1.9.3.jar
│ │ ├── commons-beanutils-1.9.2.jar
│ │ ├── commons-collections-3.2.2.jar
│ │ ├── commons-digester-1.8.1.jar
│ │ ├── commons-lang3-3.5.jar
│ │ ├── commons-logging-1.2.jar
│ │ ├── commons-validator-1.6.jar
│ │ ├── generex-1.0.2.jar
│ │ ├── guava-20.0.jar
│ │ ├── hamcrest-core-1.3.jar
│ │ ├── hamcrest-library-1.3.jar
│ │ ├── javassist-3.21.0-GA.jar
│ │ ├── junit-4.12.jar
│ │ ├── mockito-core-2.23.4.jar
│ │ ├── objenesis-2.6.jar
│ │ ├── reflections-0.9.11.jar
│ │ ├── slf4j-api-1.7.25.jar
│ │ ├── slf4j-simple-1.7.25.jar
│ │ └── snakeyaml-1.26-android.jar
│ ├── all-dependencies.log # Maven dependecies:copy-dependency logs.
│ ├── compile-scope-dependencies # This directory contains only the `compile` scope dependencies.
│ │ └── dependency
│ │ ├── automaton-1.11-8.jar
│ │ ├── commons-lang3-3.5.jar
│ │ ├── generex-1.0.2.jar
│ │ └── snakeyaml-1.26-android.jar
│ ├── compile-scope-dependencies.log
│ ├── dependency-list.log # List of all the dependencies.
│ ├── dependency-tree.log # Dependency tree.
│ ├── javafaker-1.0.3-SNAPSHOT.jar # Artifact from the original build.
│ ├── maven.log # Maven build log.
│ └── pom-original.xml # Original POM file.
For your convenience, we provide a Dockerfile will all the necessary to run the data collection pipeline.
Distributed under the MIT License. See LICENSE for more information.
DepTrim is partially funded by the Wallenberg Autonomous Systems and Software Program (WASP).