IPED Project Dependencies: A Complete Guide to the Maven Module Architecture
The IPED project dependencies are managed through a hierarchical Maven structure where the parent POM defines core logging, testing, and facade libraries, while individual modules like iped-utils, iped-app, and iped-parsers declare specialized dependencies for compression, UI components, and forensic parsing.
The sepinf-inc/IPED repository implements a modular Java architecture for digital forensic analysis, with dependency management centralized in a parent Maven POM that coordinates specialized libraries across functional modules. Understanding the complete dependency landscape requires examining both the global configuration in [pom.xml](https://github.com/sepinf-inc/IPED/blob/master/pom.xml) and the module-specific declarations that enable targeted evidence processing capabilities.
Core Dependencies in the Parent POM
The parent POM establishes the foundation for all IPED project dependencies through centralized property management and shared library versions. Located at [pom.xml (lines 76-106)](https://github.com/sepinf-inc/IPED/blob/master/pom.xml#L76-L106), this configuration defines four critical dependency categories:
- Logging:
log4j-api,log4j-core,log4j-web, andlog4j-slf4j-implprovide structured logging with SLF4J bridging - Facade:
slf4j-apiandjul-to-slf4jcreate a uniform logging API across modules - Testing:
junitandhamcrestsupply the unit-test framework - Version Management: Properties like
log4j.version,slf4j.version,junit.version, andhamcrest.versionensure consistent versioning across the entire project
Module-Specific Dependency Extensions
While the parent POM provides the baseline, individual modules extend the IPED dependencies with domain-specific libraries required for their specialized functions.
iped-utils Dependencies
The iped-utils module adds low-level utility libraries declared in [iped-utils/pom.xml (lines 13-38)](https://github.com/sepinf-inc/IPED/blob/master/iped-utils/pom.xml#L13-L38):
lz4: High-performance compression for forensic data processingcommons-codec: Encoding utilities for cryptographic operationscaffeine: High-performance caching for frequently accessed data
iped-app Dependencies
The application layer in iped-app incorporates user interface and command-line libraries defined in [iped-app/pom.xml (lines 20-55)](https://github.com/sepinf-inc/IPED/blob/master/iped-app/pom.xml#L20-L55):
jcommander: Annotation-based command-line argument parsingdocking-frames-common: Advanced Swing UI docking managementkharon: Specialized forensic visualization componentsjcalendar: Date selection widgets for temporal filteringjfreechartextensions: Extended charting capabilities for evidence analytics
iped-parsers and Forensic Libraries
The iped-parsers module implements file format detection and text extraction through a specialized dependency chain including Apache Tika, PDFBox, Lucene, SleuthKit, and LibreOffice integrations. These dependencies enable deep content inspection across hundreds of file formats critical to forensic investigation.
Additional Module Dependencies
iped-carvers: Depends onahocorasickfor efficient pattern matching during artifact carvingiped-geo: Incorporates GeoTools and related geolocation libraries for spatial evidence analysisiped-engine: Manages core processing workflows, hash-database interactions, and web API support
How the Maven Dependency Hierarchy Works
The IPED project dependencies follow a strict three-tier inheritance model:
-
Parent POM (
iped-parent): Establishes global properties, repositories, and the universal dependency list in [pom.xml](https://github.com/sepinf-inc/IPED/blob/master/pom.xml) -
Module Inheritance: Each submodule references the parent via
<parent>...</parent>tags, automatically inheriting logging and testing configurations -
Selective Extension: Modules add specific
<dependency>entries in their localpom.xmlfiles, optionally overriding parent version properties when newer releases are required
Maven resolves the effective POM by merging parent definitions with child specifications, ensuring consistent logging and testing stacks while permitting specialized tool integration.
Practical Usage Examples
Integrating IPED as a Maven Dependency
Add the core engine to your project by referencing the iped-engine artifact:
<dependency>
<groupId>iped</groupId>
<artifactId>iped-engine</artifactId>
<version>4.4.0-SNAPSHOT</version>
</dependency>
This declaration pulls the core processing engine together with the parent-defined logging and test libraries.
Implementing Logging with SLF4J
The SLF4J facade routes to Log4j2 through the log4j-slf4j-impl bridge defined in the parent POM:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyProcessor {
private static final Logger log = LoggerFactory.getLogger(MyProcessor.class);
public void run() {
log.info("Processing started");
// Forensic processing logic here
log.debug("Processing finished");
}
}
Compressing Data with LZ4
The iped-utils module exposes the LZ4 library for fast compression of forensic artifacts:
import net.jpountz.lz4.*;
byte[] original = // raw forensic data
LZ4Factory factory = LZ4Factory.fastestInstance();
LZ4Compressor compressor = factory.fastCompressor();
int maxCompressedLength = compressor.maxCompressedLength(original.length);
byte[] compressed = new byte[maxCompressedLength];
int compressedSize = compressor.compress(original, 0, original.length, compressed, 0);
Parsing Command-Line Arguments with JCommander
The iped-app module utilizes JCommander for type-safe CLI parsing:
import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
public class MainArgs {
@Parameter(names = {"-i", "--input"}, description = "Path to case folder", required = true)
private String inputPath;
@Parameter(names = {"-h", "--help"}, help = true)
private boolean help;
public static void main(String[] args) {
MainArgs ma = new MainArgs();
JCommander jc = JCommander.newBuilder()
.addObject(ma)
.build();
jc.parse(args);
if (ma.help) {
jc.usage();
return;
}
// Continue processing...
}
}
Key Configuration Files
Explore these specific files to understand the complete IPED dependency landscape:
| File | Contents | Location |
|---|---|---|
| Parent POM | Global properties, repositories, core dependencies, plugin configuration | [pom.xml](https://github.com/sepinf-inc/IPED/blob/master/pom.xml) |
| Utils POM | Utility libraries (lz4, commons-codec, caffeine) | [iped-utils/pom.xml](https://github.com/sepinf-inc/IPED/blob/master/iped-utils/pom.xml) |
| App POM | Application dependencies (jcommander, docking-frames, kharon) | [iped-app/pom.xml](https://github.com/sepinf-inc/IPED/blob/master/iped-app/pom.xml) |
| Parsers POM | Forensic parsing libraries (Tika, PDFBox, Lucene, SleuthKit) | [iped-parsers/pom.xml](https://github.com/sepinf-inc/IPED/blob/master/iped-parsers/pom.xml) |
| Viewers POM | Swing-based UI and custom viewer implementations | [iped-viewers/pom.xml](https://github.com/sepinf-inc/IPED/blob/master/iped-viewers/pom.xml) |
| ThirdParty.txt | Complete license inventory for all shipped libraries | [ThirdParty.txt](https://github.com/sepinf-inc/IPED/blob/master/ThirdParty.txt) |
Summary
-
IPED project dependencies are managed through a hierarchical Maven structure with a parent POM defining shared logging (Log4j2, SLF4J) and testing (JUnit) frameworks at [
pom.xmllines 76-106](https://github.com/sepinf-inc/IPED/blob/master/pom.xml#L76-L106) -
The
iped-utilsmodule extends baseline dependencies with LZ4 compression, Apache Commons Codec, and Caffeine caching for high-performance forensic operations -
iped-appadds UI and CLI capabilities through JCommander, Docking Frames, and visualization libraries declared in [iped-app/pom.xmllines 20-55](https://github.com/sepinf-inc/IPED/blob/master/iped-app/pom.xml#L20-L55) -
Specialized forensic parsing in
iped-parsersdepends on Apache Tika, PDFBox, Lucene, and SleuthKit for comprehensive file format support -
Module inheritance ensures consistent versioning while permitting localized dependency extensions for specific functional requirements
Frequently Asked Questions
What logging framework does IPED use?
IPED utilizes Apache Log4j2 as its primary logging implementation, bridged through SLF4J to provide a unified logging facade across all modules. The parent POM defines these dependencies centrally in [pom.xml](https://github.com/sepinf-inc/IPED/blob/master/pom.xml), including log4j-api, log4j-core, and log4j-slf4j-impl, ensuring consistent structured logging throughout the application architecture.
How do I add IPED as a dependency to my own Maven project?
Reference the iped-engine artifact in your project's pom.xml with the appropriate version, typically 4.4.0-SNAPSHOT for current development builds. This coordinates declared in [iped-app/pom.xml](https://github.com/sepinf-inc/IPED/blob/master/iped-app/pom.xml) automatically transitively includes the logging and utility libraries defined in the parent POM, though you should verify version compatibility with your existing SLF4J and Log4j2 configurations.
Which compression libraries are available in IPED?
The iped-utils module provides LZ4 compression through the lz4 dependency declared at [iped-utils/pom.xml lines 13-38](https://github.com/sepinf-inc/IPED/blob/master/iped-utils/pom.xml#L13-L38). This high-performance library is accessible to any module depending on iped-utils, offering significantly faster compression speeds than traditional algorithms for large forensic evidence files.
Where are parser-specific dependencies defined?
Forensic parsing dependencies—including Apache Tika, PDFBox, Lucene, and SleuthKit—are declared within the iped-parsers module hierarchy in [iped-parsers/pom.xml](https://github.com/sepinf-inc/IPED/blob/master/iped-parsers/pom.xml). This modular approach isolates heavy parsing libraries from the core engine, allowing selective inclusion only when deep file content analysis capabilities are required for digital evidence processing.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →