Build system with lazy retrieval for Java projects

Build system with lazy retrieval for Java projects
复制标题

为 Java 项目构建具有延迟检索的系统

DOI:
10.1145/2950290.2950358
复制
发表时间:
2016
期刊:
Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering
影响因子:
--
通讯作者:
Miloš Gligorić
Miloš Gligorić
中科院分区:
--
文献类型:
--
作者:
Ahmet Çelik;Alexander Knaust;Aleksandar Milicevic;Miloš Gligorić

文献摘要

被引文献

相似文献

在现代开发中,项目使用持续集成服务(CISS)来执行源代码中每一个更改的构建。为了确保项目保持正确和可部署,CIS每次执行干净的构建。在干净的环境中,构建系统需要检索项目的依赖项(例如Guava.jar)。但是,由于依赖关系的膨胀,检索可能会昂贵:尽管一个项目仅使用每个库中的几个文件,但现有的构建系统仍在构建开始时仍热切地检索所有库。本文提出了一个新颖的构建系统Molly,该系统懒洋洋地检索了执行构建目标期间所需的部分库(即文件)。例如,汇编目标仅需要库中类的公共接口,而测试目标只需要实现测试所调用的类。此外,莫莉(Molly)生成了一个转移脚本,该脚本根据先前的构建来检索库的一部分。 Molly的设计要求我们忽略库开发人员设定的边界,并查看库中的文件。我们为Java实施了Molly,并在17个受欢迎的开源项目中对其进行了评估。我们表明,测试目标(平均而言)仅取决于库中的文件中的9.97%。莫莉(Molly)的一种变体加速检索44.28%。此外,莫莉检索依赖性产生的脚本平均比Maven Build System快93.81%。
In the modern-day development, projects use Continuous Integration Services (CISs) to execute the build for every change in the source code. To ensure that the project remains correct and deployable, a CIS performs a clean build each time. In a clean environment, a build system needs to retrieve the project's dependencies (e.g., guava.jar). The retrieval, however, can be costly due to dependency bloat: despite a project using only a few files from each library, the existing build systems still eagerly retrieve all the libraries at the beginning of the build. This paper presents a novel build system, Molly, which lazily retrieves parts of libraries (i.e., files) that are needed during the execution of a build target. For example, the compilation target needs only public interfaces of classes within the libraries and the test target needs only implementation of the classes that are being invoked by the tests. Additionally, Molly generates a transfer script that retrieves parts of libraries based on prior builds. Molly's design requires that we ignore the boundaries set by the library developers and look at the files within the libraries. We implemented Molly for Java and evaluated it on 17 popular open-source projects. We show that test targets (on average) depend on only 9.97% of files in libraries. A variant of Molly speeds up retrieval by 44.28%. Furthermore, the scripts generated by Molly retrieve dependencies, on average, 93.81% faster than the Maven build system.