diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml index 40b5353d6..4bf2c4db7 100644 --- a/ebean-api/pom.xml +++ b/ebean-api/pom.xml @@ -116,16 +116,16 @@ - org.apache.maven.plugins - maven-jar-plugin - 2.5 + io.repaint.maven + tiles-maven-plugin + 2.24 + true - - src/main/resources/META-INF/MANIFEST.MF - + + io.avaje.tile:moditech-module:1.0 + - diff --git a/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java b/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java index 764fa86a1..c31be3aa5 100644 --- a/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java +++ b/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java @@ -1,10 +1,5 @@ package io.ebean.config; - -import java.io.IOException; -import java.net.URL; -import java.util.Enumeration; - /** * Helper to find classes taking into account the context class loader. */ @@ -77,22 +72,14 @@ public class ClassLoadConfig { * Return a new instance of the class using the default constructor. */ public Object newInstance(String className) { - try { Class cls = forName(className); - return cls.newInstance(); + return cls.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new IllegalArgumentException("Error constructing " + className, e); } } - /** - * Return the resources for the given name. - */ - public Enumeration getResources(String name) throws IOException { - return context.getResources(name); - } - /** * Return true if the given class is present. */ @@ -129,9 +116,7 @@ public class ClassLoadConfig { * Optional - if set only use this classLoader (no fallback). */ protected final ClassLoader preferredLoader; - protected final ClassLoader contextLoader; - protected final ClassLoader callerLoader; ClassLoaderContext(ClassLoader preferredLoader) { @@ -145,15 +130,7 @@ public class ClassLoadConfig { return (loader != null) ? loader : callerLoader; } - Enumeration getResources(String name) throws IOException { - if (preferredLoader != null) { - return preferredLoader.getResources(name); - } - return contextLoader().getResources(name); - } - Class forName(String name) throws ClassNotFoundException { - if (preferredLoader != null) { // only use the explicitly set classLoader return classForName(name, preferredLoader); diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java index 873304c3a..ba0ca78d1 100644 --- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java +++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java @@ -2,11 +2,7 @@ package io.ebean.config; import com.fasterxml.jackson.core.JsonFactory; import io.avaje.config.Config; -import io.ebean.DatabaseFactory; -import io.ebean.EbeanVersion; -import io.ebean.PersistenceContextScope; -import io.ebean.Query; -import io.ebean.Transaction; +import io.ebean.*; import io.ebean.annotation.*; import io.ebean.cache.ServerCachePlugin; import io.ebean.config.dbplatform.DatabasePlatform; @@ -14,14 +10,7 @@ import io.ebean.config.dbplatform.DbEncrypt; import io.ebean.config.dbplatform.DbType; import io.ebean.config.dbplatform.IdType; import io.ebean.datasource.DataSourceConfig; -import io.ebean.event.BeanFindController; -import io.ebean.event.BeanPersistController; -import io.ebean.event.BeanPersistListener; -import io.ebean.event.BeanPostConstructListener; -import io.ebean.event.BeanPostLoad; -import io.ebean.event.BeanQueryAdapter; -import io.ebean.event.BulkTableEventListener; -import io.ebean.event.ServerConfigStartup; +import io.ebean.event.*; import io.ebean.event.changelog.ChangeLogListener; import io.ebean.event.changelog.ChangeLogPrepare; import io.ebean.event.changelog.ChangeLogRegister; @@ -34,14 +23,7 @@ import javax.sql.DataSource; import java.time.Clock; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.ServiceLoader; +import java.util.*; /** * The configuration used for creating a Database. @@ -82,7 +64,6 @@ import java.util.ServiceLoader; */ public class DatabaseConfig { - /** * The Database name. */ @@ -402,8 +383,8 @@ public class DatabaseConfig { private List postConstructListeners = new ArrayList<>(); private List persistListeners = new ArrayList<>(); private List queryAdapters = new ArrayList<>(); - private List bulkTableEventListeners = new ArrayList<>(); - private List configStartupListeners = new ArrayList<>(); + private final List bulkTableEventListeners = new ArrayList<>(); + private final List configStartupListeners = new ArrayList<>(); /** * By default inserts are included in the change log. @@ -411,42 +392,26 @@ public class DatabaseConfig { private boolean changeLogIncludeInserts = true; private ChangeLogPrepare changeLogPrepare; - private ChangeLogListener changeLogListener; - private ChangeLogRegister changeLogRegister; - private boolean changeLogAsync = true; - private ReadAuditLogger readAuditLogger; - private ReadAuditPrepare readAuditPrepare; - private EncryptKeyManager encryptKeyManager; - private EncryptDeployManager encryptDeployManager; - private Encryptor encryptor; - - private boolean dbOffline; - private DbEncrypt dbEncrypt; - + private boolean dbOffline; private ServerCachePlugin serverCachePlugin; /** * The default PersistenceContextScope used if one is not explicitly set on a query. */ private PersistenceContextScope persistenceContextScope = PersistenceContextScope.TRANSACTION; - private JsonFactory jsonFactory; - private boolean localTimeWithNanos; - private boolean durationWithNanos; - private int maxCallStack = 5; - private boolean transactionRollbackOnChecked = true; // configuration for the background executor service (thread pool) @@ -2741,21 +2706,7 @@ public class DatabaseConfig { this.classLoadConfig = classLoadConfig; } - /** - * Return the service loader using the classLoader defined in ClassLoadConfig. - */ - public ServiceLoader serviceLoad(Class spiService) { - return ServiceLoader.load(spiService, classLoadConfig.getClassLoader()); - } - /** - * Return the first service using the service loader (or null). - */ - public T service(Class spiService) { - ServiceLoader load = serviceLoad(spiService); - Iterator serviceInstances = load.iterator(); - return serviceInstances.hasNext() ? serviceInstances.next() : null; - } /** * Load settings from application.properties, application.yaml and other sources. @@ -2794,7 +2745,7 @@ public class DatabaseConfig { */ private List autoConfiguration() { List list = new ArrayList<>(); - for (AutoConfigure autoConfigure : serviceLoad(AutoConfigure.class)) { + for (AutoConfigure autoConfigure : ServiceLoader.load(AutoConfigure.class)) { autoConfigure.preConfigure(this); list.add(autoConfigure); } diff --git a/ebean-api/src/main/java9/module-info.java b/ebean-api/src/main/java9/module-info.java new file mode 100644 index 000000000..56243dbd1 --- /dev/null +++ b/ebean-api/src/main/java9/module-info.java @@ -0,0 +1,58 @@ +module io.ebean.api { + + uses io.ebean.config.AutoConfigure; + uses io.ebean.datasource.DataSourceAlertFactory; + uses io.ebean.metric.MetricFactory; + uses io.ebean.service.SpiContainerFactory; + uses io.ebean.service.SpiRawSqlService; + uses io.ebean.service.SpiProfileLocationFactory; + uses io.ebean.service.SpiFetchGroupService; + + requires transitive java.sql; + requires transitive io.avaje.config; + requires transitive persistence.api; + requires transitive io.ebean.annotation; + requires transitive io.ebean.datasource.api; + requires transitive org.slf4j; + + requires static io.ebean.types; + requires static io.avaje.jsr305x; + requires static com.fasterxml.jackson.core; + requires static javax.servlet.api; + requires static com.h2database; + + exports io.ebean; + exports io.ebean.bean; + exports io.ebean.cache; + exports io.ebean.meta; + exports io.ebean.config; + exports io.ebean.config.dbplatform; + exports io.ebean.config.dbplatform.clickhouse; + exports io.ebean.config.dbplatform.h2; + exports io.ebean.config.dbplatform.db2; + exports io.ebean.config.dbplatform.cockroach; + exports io.ebean.config.dbplatform.hana; + exports io.ebean.config.dbplatform.hsqldb; + exports io.ebean.config.dbplatform.mariadb; + exports io.ebean.config.dbplatform.mysql; + exports io.ebean.config.dbplatform.nuodb; + exports io.ebean.config.dbplatform.oracle; + exports io.ebean.config.dbplatform.postgres; + exports io.ebean.config.dbplatform.sqlanywhere; + exports io.ebean.config.dbplatform.sqlite; + exports io.ebean.config.dbplatform.sqlserver; + exports io.ebean.event; + exports io.ebean.event.readaudit; + exports io.ebean.event.changelog; + exports io.ebean.common; + exports io.ebean.docstore; + exports io.ebean.plugin; + exports io.ebean.metric; + exports io.ebean.search; + exports io.ebean.service; + exports io.ebean.text; + exports io.ebean.text.json; + exports io.ebean.text.csv; + exports io.ebean.util; + +} diff --git a/ebean-api/src/main/resources/META-INF/MANIFEST.MF b/ebean-api/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 688346cde..000000000 --- a/ebean-api/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: io.ebean.api diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml index 042c4acc8..6abb71c2c 100644 --- a/ebean-autotune/pom.xml +++ b/ebean-autotune/pom.xml @@ -63,23 +63,12 @@ true - io.ebean.tile:enhancement:12.11.3 + io.avaje.tile:moditech-module:1.0 - - org.apache.maven.plugins - maven-jar-plugin - 2.5 - - - src/main/resources/META-INF/MANIFEST.MF - - - - diff --git a/ebean-autotune/src/main/java9/module-info.java b/ebean-autotune/src/main/java9/module-info.java new file mode 100644 index 000000000..6cb7d3a54 --- /dev/null +++ b/ebean-autotune/src/main/java9/module-info.java @@ -0,0 +1,15 @@ +import io.ebeaninternal.server.autotune.AutoTuneServiceProvider; +import io.ebeaninternal.server.autotune.service.AutoTuneServiceFactory; + +/** + * Provider of AutoTuneServiceProvider + */ +module io.ebean.autotune { + + provides AutoTuneServiceProvider with AutoTuneServiceFactory; + + requires io.ebean.api; + requires io.ebean.core; + requires java.xml; + requires java.xml.bind; +} diff --git a/ebean-autotune/src/main/resources/META-INF/MANIFEST.MF b/ebean-autotune/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 38bb2aa0c..000000000 --- a/ebean-autotune/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: io.ebean.autotune diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml index ea0394d73..506ef40dd 100644 --- a/ebean-core-type/pom.xml +++ b/ebean-core-type/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 ebean-parent @@ -28,4 +29,19 @@ + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + diff --git a/ebean-core-type/src/main/java9/module-info.java b/ebean-core-type/src/main/java9/module-info.java new file mode 100644 index 000000000..557d5a302 --- /dev/null +++ b/ebean-core-type/src/main/java9/module-info.java @@ -0,0 +1,10 @@ +module io.ebean.core.type { + + exports io.ebean.core.type; + + requires transitive java.sql; + requires transitive io.ebean.api; + + requires static com.fasterxml.jackson.core; + +} diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml index 26c373b04..7576c47db 100644 --- a/ebean-core/pom.xml +++ b/ebean-core/pom.xml @@ -207,17 +207,6 @@ - - org.apache.maven.plugins - maven-jar-plugin - 2.5 - - - src/main/resources/META-INF/MANIFEST.MF - - - - org.apache.maven.plugins maven-javadoc-plugin @@ -239,6 +228,18 @@ + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/ClassPathScanners.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/ClassPathScanners.java index 73eb45bac..ff41de9b4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/ClassPathScanners.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/ClassPathScanners.java @@ -5,7 +5,9 @@ import io.avaje.classpath.scanner.ClassPathScannerFactory; import io.ebean.config.DatabaseConfig; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.ServiceLoader; /** * Utility to finds and return the list of ClassPathScanner services. @@ -17,7 +19,7 @@ public class ClassPathScanners { */ public static List find(DatabaseConfig config) { List scanners = new ArrayList<>(); - for (ClassPathScannerFactory factory : config.serviceLoad(ClassPathScannerFactory.class)) { + for (ClassPathScannerFactory factory : ServiceLoader.load(ClassPathScannerFactory.class)) { scanners.add(factory.createScanner(config.getClassLoadConfig().getClassLoader())); } return scanners; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index 439f888a9..e18a2e0de 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -380,7 +380,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ public void start() { if (config.isRunMigration() && TenantMode.DB != config.getTenantMode()) { - final AutoMigrationRunner migrationRunner = config.service(AutoMigrationRunner.class); + final AutoMigrationRunner migrationRunner = ServiceUtil.service(AutoMigrationRunner.class); if (migrationRunner == null) { throw new IllegalStateException("No AutoMigrationRunner found. Probably ebean-migration is not in the classpath?"); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java index f65cb0823..5cf4d7b2c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java @@ -124,7 +124,7 @@ final class InitDataSource { * Attach DataSourceAlert via service loader if present. */ private void attachAlert(DataSourceConfig dsConfig) { - DataSourceAlertFactory alertFactory = config.service(DataSourceAlertFactory.class); + DataSourceAlertFactory alertFactory = ServiceUtil.service(DataSourceAlertFactory.class); if (alertFactory != null) { dsConfig.setAlert(alertFactory.createAlert()); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java index 50410beb0..905a344e9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java @@ -156,7 +156,7 @@ public final class InternalConfiguration { this.clockService = new ClockService(config.getClock()); this.tableModState = new TableModState(); this.logManager = initLogManager(); - this.docStoreFactory = initDocStoreFactory(config.service(DocStoreFactory.class)); + this.docStoreFactory = initDocStoreFactory(service(DocStoreFactory.class)); this.jsonFactory = config.getJsonFactory(); this.clusterManager = clusterManager; this.backgroundExecutor = backgroundExecutor; @@ -191,8 +191,12 @@ public final class InternalConfiguration { return new InternalConfigXmlMap(xmEbeans, config.getClassLoadConfig().getClassLoader()); } + private S service(Class cls) { + return ServiceUtil.service(cls); + } + private List readExternalMapping() { - final XmapService xmapService = config.service(XmapService.class); + final XmapService xmapService = service(XmapService.class); if (xmapService == null) { return Collections.emptyList(); } @@ -201,7 +205,7 @@ public final class InternalConfiguration { private SpiLogManager initLogManager() { // allow plugin - i.e. capture executed SQL for testing/asserts - SpiLoggerFactory loggerFactory = config.service(SpiLoggerFactory.class); + SpiLoggerFactory loggerFactory = service(SpiLoggerFactory.class); if (loggerFactory == null) { loggerFactory = new DLoggerFactory(); } @@ -336,7 +340,7 @@ public final class InternalConfiguration { } AutoTuneService createAutoTuneService(SpiEbeanServer server) { - final AutoTuneServiceProvider provider = config.service(AutoTuneServiceProvider.class); + final AutoTuneServiceProvider provider = service(AutoTuneServiceProvider.class); return provider == null ? new NoAutoTuneService() : provider.create(server, config); } @@ -445,7 +449,7 @@ public final class InternalConfiguration { if (!profilingConfig.isEnabled()) { return new NoopProfileHandler(); } - SpiProfileHandler handler = config.service(SpiProfileHandler.class); + SpiProfileHandler handler = service(SpiProfileHandler.class); if (handler == null) { handler = new DefaultProfileHandler(profilingConfig); } @@ -533,7 +537,7 @@ public final class InternalConfiguration { } SlowQueryListener listener = config.getSlowQueryListener(); if (listener == null) { - listener = config.service(SlowQueryListener.class); + listener = service(SlowQueryListener.class); if (listener == null) { listener = new DefaultSlowQueryListener(); } @@ -589,7 +593,7 @@ public final class InternalConfiguration { } ServerCacheFactory factory = serverCachePlugin.create(config, backgroundExecutor); - ServerCacheNotifyPlugin notifyPlugin = config.service(ServerCacheNotifyPlugin.class); + ServerCacheNotifyPlugin notifyPlugin = service(ServerCacheNotifyPlugin.class); if (notifyPlugin != null) { // plugin supplied so use that to send notifications cacheNotify = notifyPlugin.create(config); @@ -644,7 +648,7 @@ public final class InternalConfiguration { * Return the DDL generator. */ public SpiDdlGenerator initDdlGenerator(SpiEbeanServer server) { - final SpiDdlGeneratorProvider service = config.service(SpiDdlGeneratorProvider.class); + final SpiDdlGeneratorProvider service = service(SpiDdlGeneratorProvider.class); return service == null ? new NoopDdl() : service.generator(server); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/ServiceUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/ServiceUtil.java new file mode 100644 index 000000000..082f874a4 --- /dev/null +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/ServiceUtil.java @@ -0,0 +1,13 @@ +package io.ebeaninternal.server.core; + +import java.util.Iterator; +import java.util.ServiceLoader; + +public final class ServiceUtil { + + public static S service(Class cls) { + ServiceLoader load = ServiceLoader.load(cls); + Iterator serviceInstances = load.iterator(); + return serviceInstances.hasNext() ? serviceInstances.next() : null; + } +} diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java index 5d95efd6e..3dcc7c775 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java @@ -17,6 +17,7 @@ import io.ebean.types.Inet; import io.ebean.util.AnnotationUtil; import io.ebeaninternal.api.DbOffline; import io.ebeaninternal.api.GeoTypeProvider; +import io.ebeaninternal.server.core.ServiceUtil; import io.ebeaninternal.server.core.bootup.BootupClasses; import io.ebeaninternal.server.deploy.meta.DeployBeanProperty; import org.joda.time.DateTime; @@ -156,7 +157,7 @@ public final class DefaultTypeManager implements TypeManager { } private void loadGeoTypeBinder(DatabaseConfig config) { - final GeoTypeProvider provider = config.service(GeoTypeProvider.class); + final GeoTypeProvider provider = ServiceUtil.service(GeoTypeProvider.class); if (provider != null) { geoTypeBinder = provider.createBinder(config); } diff --git a/ebean-core/src/main/java9/module-info.java b/ebean-core/src/main/java9/module-info.java new file mode 100644 index 000000000..bc518b421 --- /dev/null +++ b/ebean-core/src/main/java9/module-info.java @@ -0,0 +1,63 @@ +module io.ebean.core { + + uses io.ebean.plugin.Plugin; + uses io.ebean.cache.ServerCachePlugin; + uses io.ebean.cache.ServerCacheNotifyPlugin; + uses io.ebean.config.DatabaseConfigProvider; + uses io.ebean.config.ServerConfigProvider; + uses io.ebean.config.ModuleInfoLoader; + uses io.ebean.datasource.DataSourceAlertFactory; + uses io.ebean.core.type.ExtraTypeFactory; + uses io.ebeanservice.docstore.api.DocStoreFactory; + uses io.ebean.migration.auto.AutoMigrationRunner; + uses io.avaje.classpath.scanner.ClassPathScannerFactory; + uses io.ebeaninternal.api.SpiLoggerFactory; + uses io.ebeaninternal.api.GeoTypeProvider; + uses io.ebeaninternal.api.SpiDdlGeneratorProvider; + uses io.ebeaninternal.xmapping.api.XmapService; + uses io.ebeaninternal.server.autotune.AutoTuneServiceProvider; + uses io.ebeaninternal.server.cluster.ClusterBroadcastFactory; + + requires transitive io.ebean.api; + requires transitive io.ebean.migration.auto; + requires transitive io.ebean.xmapping.api; + requires transitive io.ebean.core.type; + requires transitive io.ebean.ddl.runner; + requires transitive org.antlr.antlr4.runtime; + requires io.avaje.classpath.scanner; + requires io.ebean.types; + requires org.slf4j; + + requires static io.avaje.jsr305x; + requires static com.fasterxml.jackson.core; + requires static com.fasterxml.jackson.databind; + requires static jakarta.validation; + requires static java.transaction; + requires static java.naming; + requires static java.validation; + requires static org.postgresql.jdbc; + requires static joda.time; + + exports io.ebeaninternal.api; + exports io.ebeaninternal.server.cache; + // export these for io.ebean.ddl.generator (but that becomes unnamed module in maven test scope) + exports io.ebeaninternal.server.deploy; + exports io.ebeaninternal.server.deploy.visitor; +// exports io.ebeaninternal.server.deploy to io.ebean.autotune, io.ebean.ddl.generator; +// exports io.ebeaninternal.server.deploy.visitor to io.ebean.ddl.generator; + + exports io.ebeaninternal.server.el to io.ebean.autotune; + exports io.ebeaninternal.server.autotune to io.ebean.autotune; + exports io.ebeaninternal.server.querydefn to io.ebean.autotune, io.ebean.querybean; + exports io.ebeaninternal.server.type to io.ebean.postgis; + exports io.ebeaninternal.server.util to io.ebean.querybean; + exports io.ebeaninternal.server.expression to io.ebean.querybean; + + provides io.ebean.metric.MetricFactory with io.ebeaninternal.server.profile.DMetricFactory; + provides io.ebean.service.SpiContainerFactory with io.ebeaninternal.server.DContainerFactory; + provides io.ebean.service.SpiFetchGroupService with io.ebeaninternal.server.query.DFetchGroupService; + provides io.ebean.service.SpiJsonService with io.ebeaninternal.json.DJsonService; + provides io.ebean.service.SpiProfileLocationFactory with io.ebeaninternal.server.profile.DProfileLocationFactory; + provides io.ebean.service.SpiRawSqlService with io.ebeaninternal.server.rawsql.DRawSqlService; + +} diff --git a/ebean-core/src/main/resources/META-INF/MANIFEST.MF b/ebean-core/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 52ef5c4ce..000000000 --- a/ebean-core/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,27 +0,0 @@ -Manifest-Version: 1.0 -Premain-Class: io.ebean.enhance.agent.Transformer -Automatic-Module-Name: io.ebean.core -Bundle-ManifestVersion: 2 -Bundle-Name: Ebean-ORM -Bundle-SymbolicName: io.ebean -Bundle-Version: 4.2.0 -Bundle-ClassPath: . -Bundle-Vendor: avaje -Export-Package: io.ebean, - io.ebean.annotation, - io.ebean.bean, - io.ebean.cache, - io.ebean.common, - io.ebean.config, - io.ebean.config.dbplatform, - io.ebean.event, - io.ebean.meta, - io.ebean.text, - io.ebean.text.csv, - io.ebean.text.json, - io.ebean.util -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: org.slf4j.api;bundle-version="1.7.2" -Import-Package: javax.persistence;version="2.0.0" - - diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml index d8b8238b9..7b2f5a50d 100644 --- a/ebean-ddl-generator/pom.xml +++ b/ebean-ddl-generator/pom.xml @@ -65,7 +65,7 @@ javax.validation validation-api - 1.1.0.Final + 2.0.1.Final test @@ -90,18 +90,17 @@ - - org.apache.maven.plugins - maven-jar-plugin - 2.5 + io.repaint.maven + tiles-maven-plugin + 2.24 + true - - src/main/resources/META-INF/MANIFEST.MF - + + io.avaje.tile:moditech-module:1.0 + - diff --git a/ebean-ddl-generator/src/main/java9/module-info.java b/ebean-ddl-generator/src/main/java9/module-info.java new file mode 100644 index 000000000..65d58286e --- /dev/null +++ b/ebean-ddl-generator/src/main/java9/module-info.java @@ -0,0 +1,15 @@ +open module io.ebean.ddl.generator { + + exports io.ebean.dbmigration; + + provides io.ebean.dbmigration.DbMigration with io.ebeaninternal.dbmigration.DefaultDbMigration; + provides io.ebeaninternal.api.SpiDdlGeneratorProvider with io.ebeaninternal.dbmigration.DdlGeneratorProvider; + + requires transitive io.ebean.ddl.runner; + requires transitive io.ebean.core; + requires transitive java.xml.bind; + requires io.ebean.core.type; + requires io.ebean.migration; + + uses io.ebean.dbmigration.DbMigration; +} diff --git a/ebean-ddl-generator/src/main/resources/META-INF/MANIFEST.MF b/ebean-ddl-generator/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 54d26a6d1..000000000 --- a/ebean-ddl-generator/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: io.ebean.ddlgen diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml index 3067642f2..0facbaa24 100644 --- a/ebean-externalmapping-api/pom.xml +++ b/ebean-externalmapping-api/pom.xml @@ -14,15 +14,17 @@ - org.apache.maven.plugins - maven-jar-plugin - 2.5 + io.repaint.maven + tiles-maven-plugin + 2.24 + true - - src/main/resources/META-INF/MANIFEST.MF - + + io.avaje.tile:moditech-module:1.0 + + diff --git a/ebean-externalmapping-api/src/main/java9/module-info.java b/ebean-externalmapping-api/src/main/java9/module-info.java new file mode 100644 index 000000000..30d64401a --- /dev/null +++ b/ebean-externalmapping-api/src/main/java9/module-info.java @@ -0,0 +1,4 @@ +module io.ebean.xmapping.api { + + exports io.ebeaninternal.xmapping.api; +} diff --git a/ebean-externalmapping-api/src/main/resources/META-INF/MANIFEST.MF b/ebean-externalmapping-api/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index e18bf48cd..000000000 --- a/ebean-externalmapping-api/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: io.ebean.externalmapping.api diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml index e1c44c2a2..e7f51bc89 100644 --- a/ebean-externalmapping-xml/pom.xml +++ b/ebean-externalmapping-xml/pom.xml @@ -90,21 +90,11 @@ io.ebean.tile:enhancement:12.11.3 + io.avaje.tile:moditech-module:1.0 - - org.apache.maven.plugins - maven-jar-plugin - 2.5 - - - src/main/resources/META-INF/MANIFEST.MF - - - - diff --git a/ebean-externalmapping-xml/src/main/java9/module-info.java b/ebean-externalmapping-xml/src/main/java9/module-info.java new file mode 100644 index 000000000..c81eda11b --- /dev/null +++ b/ebean-externalmapping-xml/src/main/java9/module-info.java @@ -0,0 +1,19 @@ +import io.avaje.classpath.scanner.ClassPathScannerFactory; +import io.ebeaninternal.xmapping.api.XmapService; +import io.ebeaninternal.xmlmapping.JaxbXmapService; + +/** + * Provider of XmapService. + */ +module io.ebean.xmapping.xml { + + provides XmapService with JaxbXmapService; + + requires transitive io.ebean.xmapping.api; + requires transitive java.xml; + requires transitive java.xml.bind; + requires io.avaje.classpath.scanner; + + uses ClassPathScannerFactory; + +} diff --git a/ebean-externalmapping-xml/src/main/resources/META-INF/MANIFEST.MF b/ebean-externalmapping-xml/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 86e56b488..000000000 --- a/ebean-externalmapping-xml/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: io.ebean.externalmapping.xml diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml index a122bd7bc..4032fd07a 100644 --- a/ebean-postgis/pom.xml +++ b/ebean-postgis/pom.xml @@ -106,6 +106,7 @@ io.ebean.tile:enhancement:12.11.3 + io.avaje.tile:moditech-module:1.0 diff --git a/ebean-postgis/src/main/java9/module-info.java b/ebean-postgis/src/main/java9/module-info.java new file mode 100644 index 000000000..a24837bc8 --- /dev/null +++ b/ebean-postgis/src/main/java9/module-info.java @@ -0,0 +1,18 @@ +import io.ebean.core.type.ExtraTypeFactory; +import io.ebeaninternal.api.GeoTypeProvider; + +/** + * Provides GeoTypeProvider and ExtraTypeFactory. + */ +module io.ebean.postgis { + + provides ExtraTypeFactory with io.ebean.postgis.PostgisExtraTypeFactory; + provides GeoTypeProvider with io.ebean.postgis.PostgisGeoTypeBindProvider; + + requires io.ebean.core; + requires org.postgresql.jdbc; + requires postgis.jdbc; + requires geolatte.geom; + requires com.fasterxml.jackson.core; + +} diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml index dc8fe5394..1afa62779 100644 --- a/ebean-querybean/pom.xml +++ b/ebean-querybean/pom.xml @@ -93,7 +93,14 @@ - + + maven-surefire-plugin + + + --add-opens io.ebean.querybean/org.querytest=io.ebean.core + + + io.repaint.maven @@ -103,21 +110,11 @@ io.ebean.tile:enhancement:12.11.3 + io.avaje.tile:moditech-module:1.0 - - org.apache.maven.plugins - maven-jar-plugin - 2.5 - - - src/main/resources/META-INF/MANIFEST.MF - - - - diff --git a/ebean-querybean/src/main/java9/module-info.java b/ebean-querybean/src/main/java9/module-info.java new file mode 100644 index 000000000..b45c04c57 --- /dev/null +++ b/ebean-querybean/src/main/java9/module-info.java @@ -0,0 +1,11 @@ +module io.ebean.querybean { + + exports io.ebean.typequery; + + requires io.ebean.api; + requires io.ebean.core; + requires static io.ebean.types; + requires static joda.time; + requires static io.avaje.jsr305x; + +} diff --git a/ebean-querybean/src/main/resources/META-INF/MANIFEST.MF b/ebean-querybean/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 4f0335353..000000000 --- a/ebean-querybean/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: io.ebean.querybean diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml index 3f899fa34..89c8d87da 100644 --- a/ebean-redis/pom.xml +++ b/ebean-redis/pom.xml @@ -81,6 +81,7 @@ io.ebean.tile:enhancement:12.11.3 + io.avaje.tile:moditech-module:1.0 diff --git a/ebean-redis/src/main/java9/module-info.java b/ebean-redis/src/main/java9/module-info.java new file mode 100644 index 000000000..3cabe7f6a --- /dev/null +++ b/ebean-redis/src/main/java9/module-info.java @@ -0,0 +1,13 @@ +import io.ebean.cache.ServerCachePlugin; + +/** + * Provider of ServerCachePlugin. + */ +module io.ebean.redis { + + provides ServerCachePlugin with io.ebean.redis.RedisCachePlugin; + + requires transitive io.ebean.core; + requires transitive redis.clients.jedis; + +} diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 46f0646c7..0c80df332 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -113,7 +113,7 @@ javax.validation validation-api - 1.1.0.Final + 2.0.1.Final test @@ -221,21 +221,11 @@ io.ebean.tile:enhancement:12.11.3 + io.avaje.tile:moditech-module:1.0 - - org.apache.maven.plugins - maven-jar-plugin - 2.5 - - - src/main/resources/META-INF/MANIFEST.MF - - - - diff --git a/ebean-test/src/main/java9/module-info.java b/ebean-test/src/main/java9/module-info.java new file mode 100644 index 000000000..94307a376 --- /dev/null +++ b/ebean-test/src/main/java9/module-info.java @@ -0,0 +1,25 @@ + +open module io.ebean.test { + + exports io.ebean.test; + exports io.ebean.test.config; + exports io.ebean.test.config.platform; + exports io.ebean.test.config.provider; + + provides io.ebeaninternal.api.SpiLoggerFactory with io.ebean.test.CapturingLoggerFactory; + provides io.ebean.config.AutoConfigure with io.ebean.test.config.AutoConfigureForTesting; + + requires transitive org.slf4j; + requires transitive io.ebean.datasource; + requires transitive io.ebean.core; + requires transitive io.ebean.ddl.generator; + requires com.fasterxml.jackson.core; + requires com.fasterxml.jackson.databind; + requires com.fasterxml.jackson.datatype.jsr310; + + requires transitive io.ebean.docker; + requires transitive org.assertj.core; + requires transitive java.xml.bind; + requires transitive com.h2database; + +} diff --git a/ebean-test/src/main/resources/META-INF/MANIFEST.MF b/ebean-test/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 5dd7f3321..000000000 --- a/ebean-test/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: io.ebean.test diff --git a/ebean/pom.xml b/ebean/pom.xml index 07e20f810..b1967b57a 100644 --- a/ebean/pom.xml +++ b/ebean/pom.xml @@ -43,13 +43,14 @@ - org.apache.maven.plugins - maven-jar-plugin - 2.5 + io.repaint.maven + tiles-maven-plugin + 2.24 + true - - src/main/resources/META-INF/MANIFEST.MF - + + io.avaje.tile:moditech-module:1.0 + diff --git a/ebean/src/main/java9/module-info.java b/ebean/src/main/java9/module-info.java new file mode 100644 index 000000000..ac3f52c61 --- /dev/null +++ b/ebean/src/main/java9/module-info.java @@ -0,0 +1,7 @@ +module io.ebean { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + requires transitive io.ebean.querybean; + +} diff --git a/ebean/src/main/resources/META-INF/MANIFEST.MF b/ebean/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 48b57ad58..000000000 --- a/ebean/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Automatic-Module-Name: io.ebean diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml index 7f14f7265..f0dc3d79a 100644 --- a/querybean-generator/pom.xml +++ b/querybean-generator/pom.xml @@ -35,6 +35,17 @@ -proc:none + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + diff --git a/querybean-generator/src/main/java9/module-info.java b/querybean-generator/src/main/java9/module-info.java new file mode 100644 index 000000000..f864e9528 --- /dev/null +++ b/querybean-generator/src/main/java9/module-info.java @@ -0,0 +1,7 @@ +module io.ebean.querybean.generator { + + provides javax.annotation.processing.Processor with io.ebean.querybean.generator.Processor; + + requires java.compiler; + requires java.sql; +}