EthanPod is a Java application for managing and listening to podcasts.
EthanPod is a desktop application built in Java with JavaFX. It allows you to easily manage and listen to your favorite podcasts. You can subscribe to podcast RSS feeds, download episodes, and play them directly within the application.
The EthanPod application follows a modular Maven architecture with a clear separation of responsibilities using a layered pattern. The project is organized around 9 main modules managed by a parent POM.
<groupId>fr.github</groupId>
<artifactId>ethanpod-parent</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>Responsibilities :
- Centralized dependency version management
- Common Maven configuration
- Shared plugins (JaCoCo, Compiler)
- Java 22 as target version
Role : Domain objects and business entities
Dependencies:
- Jackson (JSON serialization)
- Log4j API
- JUnit 5 (tests)
- Mockito (tests)Role : Centralized exception handling
Dependencies:
- No external dependenciesRole : Utilities and logging configuration
Dependencies:
- SLF4J API
- Log4j SLF4J Implementation
- Log4j Core
- ethanpod-core
- ethanpod-exceptionRole : Business logic, data access, repositories
Dependencies:
- ethanpod-core
- ethanpod-util
- ethanpod-exception
- SQLite JDBC
- HikariCP (connection pooling)
- Jackson (JSON)
- Dom4j (XML processing)
- Jaxen (XPath)
- Log4j SLF4J ImplementationRole : Business services and orchestration
Dependencies:
- ethanpod-core
- ethanpod-util
- ethanpod-logicRole : User interface and visual components
Dependencies:
- ethanpod-core
- ethanpod-util
- ethanpod-logic
- ethanpod-service
- ethanpod-event
- JavaFX Controls
- Ikonli JavaFX
- Ikonli Material Design 2Role : MVC controllers and presentation logic
Dependencies:
- ethanpod-core
- ethanpod-service
- Log4j APIRole : Event system and handlers
Dependencies:
- ethanpod-core
- ethanpod-util
- JavaFX GraphicsRole : Entry point and final assembly
Dependencies:
- ALL internal modules
- JavaFX Controls
Main Class: fr.github.ethanpod.app.MainSpecial Configuration :
- Maven Assembly plugin to create an executable JAR
- Inclusion of all dependencies
- Main entry point of the application
βββββββββββββββββββββββββββ
β ethanpod-parent β
β (POM management) β
βββββββββββββββββββββββββββ
β
ββββββββββββββΌββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββ βββββββββββββ βββββββββββββββ
β core β β exception β β util β
βββββββββββ βββββββββββββ βββββββββββββββ
β β β
βββββββββββββββΌβββββββββββββββ
βΌ
βββββββββββββββ
β logic β
β (Business) β
βββββββββββββββ
β
βΌ
βββββββββββββββ
β service β
βββββββββββββββ
β
ββββββββββββββΌββββββββββββββ
βΌ βΌ βΌ
βββββββββββ ββββββββββββββ βββββββββββ
β view β β controller β β event β
βββββββββββ ββββββββββββββ βββββββββββ
β β β
ββββββββββββββΌββββββββββββββ
βΌ
βββββββββββββββ
βethanpod-app β
β (Assembly) β
βββββββββββββββ
| Technology | Version | Usage |
|---|---|---|
| SQLite JDBC | 3.46.0.1 | Embedded database |
| HikariCP | 6.3.0 | Connection pooling |
| Technology | Version | Usage |
|---|---|---|
| JavaFX | 24.0.1 | Graphical interface |
| Ikonli | 12.3.1 | Icon system |
| Material Design 2 | 12.3.1 | Icon pack |
| Technology | Version | Usage |
|---|---|---|
| Jackson | 2.18.2 | JSON serialization |
| Dom4j | 2.1.4 | XML processing |
| Jaxen | 2.0.0 | XPath queries |
| Technology | Version | Usage |
|---|---|---|
| Log4j 2 | 2.23.1 | Logging system |
| SLF4J | 2.0.17 | Logging facade |
| Technology | Version | Usage |
|---|---|---|
| JUnit 5 | 5.10.0 | Testing framework |
| Mockito | 5.18.0 | Mocking for tests |
-
View Layer (
ethanpod-view)- JavaFX components
- Data binding
- Visual presentation
-
Controller Layer (
ethanpod-controller)- User event handling
- Coordination between View and Service
-
Service Layer (
ethanpod-service)- Application logic
- Process orchestration
-
Business Logic Layer (
ethanpod-logic)- Business rules
- Data access
- Repositories
-
Core Layer (
ethanpod-core)- Data model
- Business entities
User Input β View β Controller β Service β Logic β Database
β β
Event β Controller β Service β Logic
β
View Update
<properties>
<maven.compiler.source>22</maven.compiler.source>
<maven.compiler.target>22</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>- Maven Compiler : Java 22 compilation
- Maven Assembly : Executable JAR creation
- JaCoCo : Code coverage
- SonarQube : Code quality analysis
- Java 22 or higher
- Maven for compilation and dependency management
git clone https://github.com/SamuelDouay/EthanPod.git
cd EthanPodmvn clean packageThis command generates an executable JAR file with all dependencies included.
java -jar target/EthanPod-0.0.1-jar-with-dependencies.jarTo run the tests :
mvn test