Skip to content

Latest commit

 

History

History
282 lines (221 loc) · 14.9 KB

File metadata and controls

282 lines (221 loc) · 14.9 KB

Junie Rules for GuicedEE Services

Introduction

This rules file provides guidance for consuming and applying the JPMS modular libraries produced by the GuicedEE Services project. It defines how Junie should use these artifacts instead of their original counterparts.

Project Purpose

GuicedEE Services creates Java Platform Module System (JPMS) compatible versions of popular libraries by:

  1. Shading the original libraries using Maven Shade Plugin
  2. Adding proper module-info.java descriptors
  3. Ensuring compatibility with the module system
  4. Providing consistent groupId naming conventions

Artifact Mapping Rules

Library Transformations

The project transforms original libraries into JPMS-compatible versions with the following pattern:

Original Coordinates GuicedEE Coordinates Module Name Notes
com.fazecast:jSerialComm com.guicedee.modules.services:jserialcomm io.jserialcomm Removed as of 2.11.2 - now properly modularized
org.javassist:javassist com.guicedee.modules.services:javassist javassist
io.cloudevents:cloudevents-core com.guicedee.modules.services:cloudevents io.cloudevents
org.testcontainers:testcontainers com.guicedee.modules.services:testcontainers org.testcontainers
org.hibernate:hibernate-core com.guicedee.modules.services:hibernate-core org.hibernate.core

Usage Examples

Maven Dependency Example

For most libraries, use the GuicedEE modular version instead of the original:

Original library (not recommended for most libraries):

<dependency>
    <groupId>org.some.library</groupId>
    <artifactId>library-name</artifactId>
    <version>x.y.z</version>
</dependency>

GuicedEE modular version (recommended for most libraries):

<dependency>
    <groupId>com.guicedee.modules.services</groupId>
    <artifactId>library-name</artifactId>
    <version>2.0.2-SNAPSHOT</version>
</dependency>

Note for jSerialComm: As of version 2.11.2, jSerialComm is properly modularized, so use the original library directly:

<dependency>
    <groupId>com.fazecast</groupId>
    <artifactId>jSerialComm</artifactId>
    <version>2.11.2</version>
</dependency>

Module Requires Example

For most libraries, use the GuicedEE module name:

// For most libraries, use the GuicedEE module name
module your.module {
    requires org.some.library.module;
}

Note for jSerialComm: As of version 2.11.2, jSerialComm is properly modularized, so use its module directly:

// For jSerialComm 2.11.2+, use the original module
module your.module {
    requires com.fazecast.jSerialComm;
}

Library Categories

Service Libraries (com.guicedee.modules.services)

These are shaded versions of third-party libraries with added module-info.java descriptors:

Apache

  • CXF: apache-cxf, apache-cxf-rest, apache-cxf-rt-security, apache-cxf-rt-transports-http, apache-cxf-rest-openapi
Original Coordinates GuicedEE Coordinates Module Name
org.apache.cxf:cxf-core com.guicedee.modules.services:apache-cxf org.apache.cxf
org.apache.cxf:cxf-rt-rs-client com.guicedee.modules.services:apache-cxf-rest org.apache.cxf.rest
org.apache.cxf:cxf-rt-security com.guicedee.modules.services:apache-cxf-rt-security org.apache.cxf.rt.security
org.apache.cxf:cxf-rt-transports-http com.guicedee.modules.services:apache-cxf-rt-transports-http org.apache.cxf.rt.transports.http
org.apache.cxf:cxf-rt-rs-service-description-openapi-v3 com.guicedee.modules.services:apache-cxf-rest-openapi org.apache.cxf.rest.openapi
  • Commons: commons-beanutils, commons-collections, commons-csv, commons-fileupload, commons-math
Original Coordinates GuicedEE Coordinates Module Name
commons-beanutils:commons-beanutils com.guicedee.modules.services:commons-beanutils org.apache.commons.beanutils
org.apache.commons:commons-collections4 com.guicedee.modules.services:commons-collections org.apache.commons.collections
org.apache.commons:commons-csv com.guicedee.modules.services:commons-csv org.apache.commons.csv
commons-fileupload:commons-fileupload com.guicedee.modules.services:commons-fileupload org.apache.commons.fileupload
org.apache.commons:commons-math3 com.guicedee.modules.services:commons-math org.apache.commons.math
  • POI: apache-poi, apache-poi-ooxml
Original Coordinates GuicedEE Coordinates Module Name
org.apache.poi:poi com.guicedee.modules.services:apache-poi org.apache.poi
org.apache.poi:poi-ooxml com.guicedee.modules.services:apache-poi-ooxml org.apache.poi.ooxml

Database

  • Database Drivers: postgresql, mssql-jdbc, msal4j
Original Coordinates GuicedEE Coordinates Module Name
org.postgresql:postgresql com.guicedee.modules.services:postgresql org.postgresql
com.microsoft.sqlserver:mssql-jdbc com.guicedee.modules.services:mssql-jdbc com.microsoft.sqlserver.jdbc
com.microsoft.azure:msal4j com.guicedee.modules.services:msal4j com.microsoft.azure.msal4j

Google

  • Core: aop, guava, guice-assistedinject, guice-core, guice-grapher, guice-jmx, guice-jndi, guice-persist, guice-servlet
Original Coordinates GuicedEE Coordinates Module Name
com.google.inject.extensions:guice-assistedinject com.guicedee.modules.services:guice-assistedinject com.google.inject.assistedinject
com.google.inject:guice com.guicedee.modules.services:guice-core com.google.inject
com.google.inject.extensions:guice-grapher com.guicedee.modules.services:guice-grapher com.google.inject.grapher
com.google.inject.extensions:guice-jmx com.guicedee.modules.services:guice-jmx com.google.inject.jmx
com.google.inject.extensions:guice-jndi com.guicedee.modules.services:guice-jndi com.google.inject.jndi
com.google.inject.extensions:guice-persist com.guicedee.modules.services:guice-persist com.google.inject.persist
com.google.inject.extensions:guice-servlet com.guicedee.modules.services:guice-servlet com.google.inject.servlet
com.google.guava:guava com.guicedee.modules.services:guava com.google.common
org.aopalliance:aopalliance com.guicedee.modules.services:aop org.aopalliance

Hibernate

  • ORM: hibernate-core, hibernate-jcache, hibernate-reactive, hibernate-validator
Original Coordinates GuicedEE Coordinates Module Name
org.hibernate:hibernate-core com.guicedee.modules.services:hibernate-core org.hibernate.core
org.hibernate:hibernate-jcache com.guicedee.modules.services:hibernate-jcache org.hibernate.jcache
org.hibernate.reactive:hibernate-reactive-core com.guicedee.modules.services:hibernate-reactive org.hibernate.reactive
org.hibernate.validator:hibernate-validator com.guicedee.modules.services:hibernate-validator org.hibernate.validator

JBoss

  • Logging: jboss-logmanager
Original Coordinates GuicedEE Coordinates Module Name
org.jboss.logmanager:jboss-logmanager com.guicedee.modules.services:jboss-logmanager org.jboss.logmanager

JCache

  • Caching: cache-annotations-ri-common, cache-annotations-ri-guice, cache-api, hazelcast, hazelcast-hibernate
Original Coordinates GuicedEE Coordinates Module Name
org.jsr107.ri:cache-annotations-ri-common com.guicedee.modules.services:cache-annotations-ri-common org.jsr107.ri.annotations.common
org.jsr107.ri:cache-annotations-ri-guice com.guicedee.modules.services:cache-annotations-ri-guice org.jsr107.ri.annotations.guice
javax.cache:cache-api com.guicedee.modules.services:cache-api javax.cache
com.hazelcast:hazelcast com.guicedee.modules.services:hazelcast com.hazelcast
com.hazelcast:hazelcast-hibernate53 com.guicedee.modules.services:hazelcast-hibernate com.hazelcast.hibernate

JNI

  • Native Interface: jna-platform, nrjavaserial
Original Coordinates GuicedEE Coordinates Module Name
net.java.dev.jna:jna-platform com.guicedee.modules.services:jna-platform com.sun.jna.platform
com.neuronrobotics:nrjavaserial com.guicedee.modules.services:nrjavaserial com.neuronrobotics.nrjavaserial

Jakarta

  • Security: jakarta-security-jacc
Original Coordinates GuicedEE Coordinates Module Name
jakarta.security.jacc:jakarta.security.jacc-api com.guicedee.modules.services:jakarta-security-jacc jakarta.security.jacc

Libraries

  • Transaction Management: BitronixTransactionManager
Original Coordinates GuicedEE Coordinates Module Name
org.codehaus.btm:btm com.guicedee.modules.services:btm org.codehaus.btm
  • Utility Libraries: bcrypt, jandex, javassist, json, kafka-client, mapstruct, scram, uadetector-core, uadetector-resources
Original Coordinates GuicedEE Coordinates Module Name Notes
at.favre.lib:bcrypt com.guicedee.modules.services:bcrypt at.favre.lib.bcrypt
com.fazecast:jSerialComm com.guicedee.modules.services:jserialcomm io.jserialcomm Removed as of 2.11.2 - now properly modularized as com.fazecast.jSerialComm
org.jboss:jandex com.guicedee.modules.services:jandex org.jboss.jandex
org.javassist:javassist com.guicedee.modules.services:javassist javassist
org.json:json com.guicedee.modules.services:json org.json
org.mapstruct:mapstruct com.guicedee.modules.services:mapstruct org.mapstruct
com.ongres.scram:client com.guicedee.modules.services:scram com.ongres.scram.client
net.sf.uadetector:uadetector-core com.guicedee.modules.services:uadetector-core net.sf.uadetector.core
net.sf.uadetector:uadetector-resources com.guicedee.modules.services:uadetector-resources net.sf.uadetector.resources
  • Integration Libraries: cloudevents, ibm-mq, rabbitmq-client
Original Coordinates GuicedEE Coordinates Module Name
io.cloudevents:cloudevents-core com.guicedee.modules.services:cloudevents io.cloudevents
com.ibm.mq:com.ibm.mq.allclient com.guicedee.modules.services:ibm-mq com.ibm.mq
com.rabbitmq:amqp-client com.guicedee.modules.services:rabbitmq-client com.rabbitmq.client
org.apache.kafka:kafka-client com.guicedee.modules.services:kafka-client org.apache.kafka.clients
  • Testing Libraries: testcontainers
Original Coordinates GuicedEE Coordinates Module Name
org.testcontainers:testcontainers com.guicedee.modules.services:testcontainers org.testcontainers
  • Document Processing: openpdf, swagger
Original Coordinates GuicedEE Coordinates Module Name
com.github.librepdf:openpdf com.guicedee.modules.services:openpdf com.lowagie.text
io.swagger:swagger-core com.guicedee.modules.services:swagger io.swagger

MicroProfile

  • Configuration: config-core, metrics-core
Original Coordinates GuicedEE Coordinates Module Name
org.eclipse.microprofile.config:microprofile-config-api com.guicedee.modules.services:config-core org.eclipse.microprofile.config
org.eclipse.microprofile.metrics:microprofile-metrics-api com.guicedee.modules.services:metrics-core org.eclipse.microprofile.metrics

Representations

  • Data Formats: ExcelRepresentation, JsonRepresentation, XmlRepresentation
Original Coordinates GuicedEE Coordinates Module Name
com.guicedee.modules.services:excel-representation com.guicedee.modules.services:ExcelRepresentation com.guicedee.modules.services.excelrepresentation
com.guicedee.modules.services:json-representation com.guicedee.modules.services:JsonRepresentation com.guicedee.modules.services.jsonrepresentation
com.guicedee.modules.services:xml-representation com.guicedee.modules.services:XmlRepresentation com.guicedee.modules.services.xmlrepresentation

Vert.x

  • Reactive: vertx-mutiny, vertx-pg-client, vertx-rabbitmq, vertx-cassandra
Original Coordinates GuicedEE Coordinates Module Name
io.smallrye.reactive:smallrye-mutiny-vertx-core com.guicedee.modules.services:vertx-mutiny io.smallrye.mutiny.vertx.core
io.vertx:vertx-pg-client com.guicedee.modules.services:vertx-pg-client io.vertx.pgclient
io.vertx:vertx-rabbitmq-client com.guicedee.modules.services:vertx-rabbitmq io.vertx.rabbitmq
io.vertx:vertx-cassandra-client com.guicedee.modules.services:vertx-cassandra io.vertx.cassandra.client

Module Information

The project provides proper JPMS modules through:

  • Standard Libraries: src/moditect/module-info.java

    module io.cloudevents {
        exports io.cloudevents;
        exports io.cloudevents.core.builder;
        // Additional exports...
    
        uses io.cloudevents.core.format.EventFormat;
        provides io.cloudevents.core.format.EventFormat with io.cloudevents.jackson.JsonFormat;
    }
  • Core Components: src/main/java/module-info.java

Exclusions

  • Excluded Components: com.guicedee:guice-inject-client should not be used with Junie.
    • Note: guice-inject-client provides the interfaces and SPIs for GuicedEE to develop libraries that are loosely coupled.
    • It contains core interfaces like IGuiceModule, IGuiceProvider, IGuicePreStartup, IGuicePostStartup, etc.
    • These interfaces enable the plugin architecture and dependency injection framework of GuicedEE.

Implementation Notes

  1. All libraries maintain the same package structure as their original counterparts
  2. The shaded artifacts include all transitive dependencies
  3. Version alignment is managed through the guicedee-bom
  4. Module names typically match the main package of the original library

Troubleshooting

When using these modular libraries, you might encounter the following issues:

  1. Module not found: Ensure you're using the correct module name in your requires statement
  2. Package not accessible: Check that the package is properly exported in the module-info.java
  3. Version conflicts: Use the guicedee-bom to manage version alignment