From f4df9dd5200bf4402f7a45e5e3bd07a91758a4f0 Mon Sep 17 00:00:00 2001 From: Tom Cools Date: Thu, 26 Feb 2026 21:45:24 +0100 Subject: [PATCH 1/5] chore: Add module-info.java files. --- core/src/main/java/module-info.java | 147 ++++++++++++++++++ .../common/src/main/java/module-info.java | 5 + .../jackson/src/main/java/module-info.java | 13 ++ .../jaxb/src/main/java/module-info.java | 8 + .../jpa/src/main/java/module-info.java | 6 + .../deployment/src/main/java/module-info.java | 6 + .../src/main/java/module-info.java | 6 + .../runtime/src/main/java/module-info.java | 8 + .../deployment/src/main/java/module-info.java | 17 ++ .../src/main/java/module-info.java | 4 + .../src/main/java/module-info.java | 6 + .../src/main/java/module-info.java | 6 + .../runtime/src/main/java/module-info.java | 18 +++ .../src/main/java/module-info.java | 15 ++ .../src/main/java/module-info.java | 7 + .../src/main/java/module-info.java | 5 + .../benchmark/src/main/java/module-info.java | 18 +++ .../migration/src/main/java/module-info.java | 4 + 18 files changed, 299 insertions(+) create mode 100644 core/src/main/java/module-info.java create mode 100644 persistence/common/src/main/java/module-info.java create mode 100644 persistence/jackson/src/main/java/module-info.java create mode 100644 persistence/jaxb/src/main/java/module-info.java create mode 100644 persistence/jpa/src/main/java/module-info.java create mode 100644 quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java create mode 100644 quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java create mode 100644 quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java create mode 100644 quarkus-integration/quarkus/deployment/src/main/java/module-info.java create mode 100644 quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java create mode 100644 quarkus-integration/quarkus/integration-test/src/main/java/module-info.java create mode 100644 quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java create mode 100644 quarkus-integration/quarkus/runtime/src/main/java/module-info.java create mode 100644 spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java create mode 100644 spring-integration/spring-boot-integration-test/src/main/java/module-info.java create mode 100644 tools/benchmark-aggregator/src/main/java/module-info.java create mode 100644 tools/benchmark/src/main/java/module-info.java create mode 100644 tools/migration/src/main/java/module-info.java diff --git a/core/src/main/java/module-info.java b/core/src/main/java/module-info.java new file mode 100644 index 00000000000..84ef1d7649d --- /dev/null +++ b/core/src/main/java/module-info.java @@ -0,0 +1,147 @@ +open module ai.timefold.solver.core { + // explicit exports to other modules + exports ai.timefold.solver.core.impl.solver.scope to + ai.timefold.solver.jackson, timefold.solver.benchmark, timefold.solver.spring.boot.autoconfigure, + timefold.solver.quarkus.deployment, timefold.solver.quarkus.integration.test; + exports ai.timefold.solver.core.impl.constructionheuristic.event to + ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.constructionheuristic.scope to + ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.io.jaxb to + ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.spring.boot.autoconfigure, + timefold.solver.benchmark, timefold.solver.spring.boot.autoconfigure, timefold.solver.spring.boot.it, + timefold.solver.quarkus; + exports ai.timefold.solver.core.impl.domain.entity.descriptor + to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, timefold.solver.benchmark, + timefold.solver.spring.boot.autoconfigure, timefold.solver.quarkus.integration.test, timefold.solver.quarkus, + timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.domain.solution to ai.timefold.solver.jackson, timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.domain.solution.descriptor + to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.test, ai.timefold.solver.core.test, + timefold.solver.benchmark, timefold.solver.spring.boot.autoconfigure, timefold.solver.test, + timefold.solver.quarkus.integration.test, timefold.solver.quarkus, timefold.solver.quarkus.deployment, + timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.domain.variable.descriptor + to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, timefold.solver.benchmark, + timefold.solver.quarkus, timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.util + to ai.timefold.solver.jackson, ai.timefold.solver.test, timefold.solver.benchmark, timefold.solver.test, + timefold.solver.quarkus.deployment, timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.score.stream to ai.timefold.solver.jackson; + exports ai.timefold.solver.core.impl.score.stream.collector to ai.timefold.solver.jackson, timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.solver + to ai.timefold.solver.jackson, ai.timefold.solver.spring.boot.autoconfigure, + timefold.solver.spring.boot.autoconfigure, timefold.solver.benchmark, timefold.solver.quarkus, + timefold.solver.quarkus.deployment, timefold.solver.quarkus.integration.test, timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.io.jaxb.adapter to ai.timefold.solver.benchmark, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.score.definition + to ai.timefold.solver.test, timefold.solver.benchmark, timefold.solver.test; + exports ai.timefold.solver.core.impl.heuristic.selector to ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector.entity to ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector.entity.pillar + to ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector.move to ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector.value to ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.localsearch.event to ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.phase.event to ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.phase.scope to ai.timefold.solver.jackson, timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector.common.nearby + to ai.timefold.solver.jackson, + timefold.solver.benchmark, + timefold.solver.benchmark.aggregator, + ai.timefold.solver.spring.boot.autoconfigure, + timefold.solver.spring.boot.autoconfigure, timefold.solver.quarkus.deployment; + exports ai.timefold.solver.core.impl.score.constraint to timefold.solver.benchmark, timefold.solver.test; + exports ai.timefold.solver.core.impl.partitionedsearch.partitioner to timefold.solver.quarkus.deployment; + exports ai.timefold.solver.core.impl.heuristic.selector.common.decorator to timefold.solver.quarkus.deployment; + + // IMPL usage + exports ai.timefold.solver.core.impl.solver.thread; + exports ai.timefold.solver.core.impl.heuristic.move; + exports ai.timefold.solver.core.impl.localsearch.scope; + exports ai.timefold.solver.core.impl.heuristic.selector.list; + exports ai.timefold.solver.core.impl.heuristic.selector.move.factory; + exports ai.timefold.solver.core.impl.heuristic.selector.move.generic; + exports ai.timefold.solver.core.impl.heuristic.selector.move.generic.list; + exports ai.timefold.solver.core.impl.score.stream.common; + exports ai.timefold.solver.core.impl.score.stream.common.inliner; + exports ai.timefold.solver.core.impl.score.director.stream; + exports ai.timefold.solver.core.impl.score.stream.bavet; + exports ai.timefold.solver.core.impl.domain.solution.cloner.gizmo; + exports ai.timefold.solver.core.impl.domain.common.accessor; + exports ai.timefold.solver.core.impl.domain.common; + exports ai.timefold.solver.core.impl.domain.common.accessor.gizmo; + exports ai.timefold.solver.core.impl.score to timefold.solver.benchmark, timefold.solver.test; + exports ai.timefold.solver.core.impl.score.trend to timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.score.director; + exports ai.timefold.solver.core.impl.score.director.easy to timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.score.director.incremental to timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.solver.monitoring to timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.solver.termination; + + // expected exports + exports ai.timefold.solver.core.api.domain.common; + exports ai.timefold.solver.core.api.domain.entity; + exports ai.timefold.solver.core.api.domain.solution; + exports ai.timefold.solver.core.api.domain.solution.cloner; + exports ai.timefold.solver.core.api.domain.valuerange; + exports ai.timefold.solver.core.api.domain.variable; + exports ai.timefold.solver.core.api.function; + exports ai.timefold.solver.core.api.score; + exports ai.timefold.solver.core.api.score.analysis; + exports ai.timefold.solver.core.api.score.stream; + exports ai.timefold.solver.core.api.score.stream.common; + exports ai.timefold.solver.core.api.score.stream.uni; + exports ai.timefold.solver.core.api.score.stream.bi; + exports ai.timefold.solver.core.api.score.stream.tri; + exports ai.timefold.solver.core.api.score.stream.penta; + exports ai.timefold.solver.core.api.score.stream.quad; + exports ai.timefold.solver.core.api.score.calculator; + exports ai.timefold.solver.core.config.solver; + exports ai.timefold.solver.core.config.solver.random; + exports ai.timefold.solver.core.config.solver.monitoring; + exports ai.timefold.solver.core.config.solver.termination; + exports ai.timefold.solver.core.config.heuristic.selector.entity; + exports ai.timefold.solver.core.config.heuristic.selector.entity.pillar; + exports ai.timefold.solver.core.config.heuristic.selector.list; + exports ai.timefold.solver.core.config.heuristic.selector.move; + exports ai.timefold.solver.core.config.heuristic.selector.move.factory; + exports ai.timefold.solver.core.config.heuristic.selector.move.composite; + exports ai.timefold.solver.core.config.heuristic.selector.move.generic; + exports ai.timefold.solver.core.config.heuristic.selector.value; + exports ai.timefold.solver.core.config.heuristic.selector.common; + exports ai.timefold.solver.core.config.heuristic.selector.common.decorator; + exports ai.timefold.solver.core.config.heuristic.selector.common.nearby; + exports ai.timefold.solver.core.config.localsearch; + exports ai.timefold.solver.core.config.localsearch.decider.forager; + exports ai.timefold.solver.core.config.localsearch.decider.acceptor; + exports ai.timefold.solver.core.config.localsearch.decider.acceptor.stepcountinghillclimbing; + exports ai.timefold.solver.core.config.partitionedsearch; + exports ai.timefold.solver.core.config.phase; + exports ai.timefold.solver.core.config.phase.custom; + exports ai.timefold.solver.core.config.score.director; + exports ai.timefold.solver.core.config.score.trend; + exports ai.timefold.solver.core.config.util; + exports ai.timefold.solver.core.config; + exports ai.timefold.solver.core.api.score.constraint; + exports ai.timefold.solver.core.api.solver; + exports ai.timefold.solver.core.api.solver.event; + exports ai.timefold.solver.core.api.solver.phase; + exports ai.timefold.solver.core.api.solver.change; + exports ai.timefold.solver.core.config.constructionheuristic; + exports ai.timefold.solver.core.enterprise; + + // Preview APIs + exports ai.timefold.solver.core.preview.api.move; + exports ai.timefold.solver.core.preview.api.domain.metamodel; + exports ai.timefold.solver.core.preview.api.domain.solution.diff; + exports ai.timefold.solver.core.impl.domain.variable.declarative; + + requires commons.math3; + requires jakarta.xml.bind; + requires java.xml; + requires micrometer.core; + requires org.jspecify; + requires org.slf4j; + requires io.quarkus.gizmo2; +} \ No newline at end of file diff --git a/persistence/common/src/main/java/module-info.java b/persistence/common/src/main/java/module-info.java new file mode 100644 index 00000000000..e0c2f4b613a --- /dev/null +++ b/persistence/common/src/main/java/module-info.java @@ -0,0 +1,5 @@ +module ai.timefold.solver.persistence.common { + requires ai.timefold.solver.core; + + exports ai.timefold.solver.persistence.common.api.domain.solution; +} \ No newline at end of file diff --git a/persistence/jackson/src/main/java/module-info.java b/persistence/jackson/src/main/java/module-info.java new file mode 100644 index 00000000000..2c2897b5360 --- /dev/null +++ b/persistence/jackson/src/main/java/module-info.java @@ -0,0 +1,13 @@ +open module ai.timefold.solver.jackson { + exports ai.timefold.solver.jackson.api; + + provides tools.jackson.databind.JacksonModule with + ai.timefold.solver.jackson.api.TimefoldJacksonModule; + + requires ai.timefold.solver.core; + requires ai.timefold.solver.persistence.common; + requires org.jspecify; + requires tools.jackson.databind; + + uses tools.jackson.databind.JacksonModule; +} \ No newline at end of file diff --git a/persistence/jaxb/src/main/java/module-info.java b/persistence/jaxb/src/main/java/module-info.java new file mode 100644 index 00000000000..b6724bb0011 --- /dev/null +++ b/persistence/jaxb/src/main/java/module-info.java @@ -0,0 +1,8 @@ +open module ai.timefold.solver.jaxb { + exports ai.timefold.solver.jaxb.api.score; + + requires ai.timefold.solver.persistence.common; + requires ai.timefold.solver.core; + requires jakarta.xml.bind; + +} \ No newline at end of file diff --git a/persistence/jpa/src/main/java/module-info.java b/persistence/jpa/src/main/java/module-info.java new file mode 100644 index 00000000000..dace4a9b621 --- /dev/null +++ b/persistence/jpa/src/main/java/module-info.java @@ -0,0 +1,6 @@ +module ai.timefold.solver.jpa { + requires jakarta.persistence; + requires ai.timefold.solver.core; + + exports ai.timefold.solver.jpa.api.score; +} \ No newline at end of file diff --git a/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java new file mode 100644 index 00000000000..f44408df532 --- /dev/null +++ b/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java @@ -0,0 +1,6 @@ +open module timefold.solver.quarkus.jackson.deployment { + requires quarkus.core.deployment; + requires quarkus.jackson.spi; + requires timefold.solver.quarkus.jackson; + requires quarkus.core; +} \ No newline at end of file diff --git a/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java new file mode 100644 index 00000000000..bfcd1d28a4d --- /dev/null +++ b/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java @@ -0,0 +1,6 @@ +open module timefold.solver.quarkus.jackson.integration.test { + requires ai.timefold.solver.core; + requires jakarta.inject; + requires jakarta.ws.rs; + requires org.jspecify; +} \ No newline at end of file diff --git a/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java new file mode 100644 index 00000000000..295ee55db64 --- /dev/null +++ b/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java @@ -0,0 +1,8 @@ +open module timefold.solver.quarkus.jackson { + exports ai.timefold.solver.quarkus.jackson; + + requires ai.timefold.solver.core; + requires ai.timefold.solver.persistence.common; + requires com.fasterxml.jackson.databind; + requires org.jspecify; +} \ No newline at end of file diff --git a/quarkus-integration/quarkus/deployment/src/main/java/module-info.java b/quarkus-integration/quarkus/deployment/src/main/java/module-info.java new file mode 100644 index 00000000000..d441725b145 --- /dev/null +++ b/quarkus-integration/quarkus/deployment/src/main/java/module-info.java @@ -0,0 +1,17 @@ +open module timefold.solver.quarkus.deployment { + requires timefold.solver.quarkus; + requires quarkus.arc.deployment; + requires quarkus.builder; + requires quarkus.core.deployment; + requires quarkus.devui.deployment.spi; + requires ai.timefold.solver.core; + requires io.quarkus.gizmo2; + requires jakarta.cdi; + requires quarkus.core; + requires org.jboss.logging; + requires arc.processor; + requires org.jspecify; + requires io.quarkus.gizmo; + requires org.objectweb.asm; + requires org.jboss.jandex; +} \ No newline at end of file diff --git a/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java new file mode 100644 index 00000000000..31a062b36a5 --- /dev/null +++ b/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java @@ -0,0 +1,4 @@ +open module timefold.solver.quarkus.devui.integration.test { + requires ai.timefold.solver.core; + requires org.jspecify; +} \ No newline at end of file diff --git a/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java new file mode 100644 index 00000000000..2667d7f0a41 --- /dev/null +++ b/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java @@ -0,0 +1,6 @@ +open module timefold.solver.quarkus.integration.test { + requires ai.timefold.solver.core; + requires jakarta.inject; + requires jakarta.ws.rs; + requires org.jspecify; +} \ No newline at end of file diff --git a/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java new file mode 100644 index 00000000000..bf09a111900 --- /dev/null +++ b/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java @@ -0,0 +1,6 @@ +open module timefold.solver.quarkus.reflection.integration.test { + requires ai.timefold.solver.core; + requires jakarta.inject; + requires jakarta.ws.rs; + requires org.jspecify; +} \ No newline at end of file diff --git a/quarkus-integration/quarkus/runtime/src/main/java/module-info.java b/quarkus-integration/quarkus/runtime/src/main/java/module-info.java new file mode 100644 index 00000000000..ed57a66c49d --- /dev/null +++ b/quarkus-integration/quarkus/runtime/src/main/java/module-info.java @@ -0,0 +1,18 @@ +open module timefold.solver.quarkus { + exports ai.timefold.solver.quarkus.bean; + exports ai.timefold.solver.quarkus; + exports ai.timefold.solver.quarkus.config; + exports ai.timefold.solver.quarkus.devui; + exports ai.timefold.solver.quarkus.gizmo; + + requires ai.timefold.solver.core; + requires arc; + requires io.vertx.core; + requires jakarta.cdi; + requires jakarta.inject; + requires org.graalvm.nativeimage; + requires org.jboss.logging; + requires org.jspecify; + requires quarkus.core; + requires smallrye.config.core; +} \ No newline at end of file diff --git a/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java b/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java new file mode 100644 index 00000000000..8f2558d17bd --- /dev/null +++ b/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java @@ -0,0 +1,15 @@ +module timefold.solver.spring.boot.autoconfigure { + requires ai.timefold.solver.jackson; + requires org.apache.commons.logging; + requires spring.beans; + requires spring.boot; + requires spring.boot.autoconfigure; + requires spring.boot.persistence; + requires spring.context; + requires spring.core; + requires tools.jackson.databind; + requires timefold.solver.benchmark; + requires timefold.solver.test; + requires ai.timefold.solver.core; + requires org.jspecify; +} \ No newline at end of file diff --git a/spring-integration/spring-boot-integration-test/src/main/java/module-info.java b/spring-integration/spring-boot-integration-test/src/main/java/module-info.java new file mode 100644 index 00000000000..2c71b3e2980 --- /dev/null +++ b/spring-integration/spring-boot-integration-test/src/main/java/module-info.java @@ -0,0 +1,7 @@ +module timefold.solver.spring.boot.it { + requires ai.timefold.solver.core; + requires org.jspecify; + requires spring.boot; + requires spring.boot.autoconfigure; + requires spring.web; +} \ No newline at end of file diff --git a/tools/benchmark-aggregator/src/main/java/module-info.java b/tools/benchmark-aggregator/src/main/java/module-info.java new file mode 100644 index 00000000000..9777260458f --- /dev/null +++ b/tools/benchmark-aggregator/src/main/java/module-info.java @@ -0,0 +1,5 @@ +module timefold.solver.benchmark.aggregator { + requires java.desktop; + requires timefold.solver.benchmark; + requires org.slf4j; +} \ No newline at end of file diff --git a/tools/benchmark/src/main/java/module-info.java b/tools/benchmark/src/main/java/module-info.java new file mode 100644 index 00000000000..7390058610d --- /dev/null +++ b/tools/benchmark/src/main/java/module-info.java @@ -0,0 +1,18 @@ +open module timefold.solver.benchmark { + requires ai.timefold.solver.jaxb; + requires ai.timefold.solver.persistence.common; + requires freemarker; + requires ai.timefold.solver.core; + requires org.jspecify; + requires jakarta.xml.bind; + requires org.slf4j; + requires micrometer.core; + + exports ai.timefold.solver.benchmark.api; + exports ai.timefold.solver.benchmark.config; + exports ai.timefold.solver.benchmark.config.report; + exports ai.timefold.solver.benchmark.impl; + exports ai.timefold.solver.benchmark.impl.report; + exports ai.timefold.solver.benchmark.impl.result; + exports ai.timefold.solver.benchmark.impl.statistic.common; +} \ No newline at end of file diff --git a/tools/migration/src/main/java/module-info.java b/tools/migration/src/main/java/module-info.java new file mode 100644 index 00000000000..726c9ff526f --- /dev/null +++ b/tools/migration/src/main/java/module-info.java @@ -0,0 +1,4 @@ +module timefold.solver.migration { + requires rewrite.core; + requires rewrite.java; +} \ No newline at end of file From b0394c4bbbe35a1c350e9971ba238376bba77ac2 Mon Sep 17 00:00:00 2001 From: Tom Cools Date: Thu, 26 Feb 2026 23:03:08 +0100 Subject: [PATCH 2/5] chore: Fix quarkus module-info.java --- build/build-parent/pom.xml | 26 +++++++++++++++++++ core/src/main/java/module-info.java | 2 ++ quarkus-integration/pom.xml | 2 ++ .../deployment/src/main/java/module-info.java | 6 +++-- quarkus-integration/quarkus/pom.xml | 18 +++++++++++++ .../runtime/src/main/java/module-info.java | 6 +++-- .../src/main/java/module-info.java | 1 - 7 files changed, 56 insertions(+), 5 deletions(-) diff --git a/build/build-parent/pom.xml b/build/build-parent/pom.xml index ef9086225db..3d8b1f10d81 100644 --- a/build/build-parent/pom.xml +++ b/build/build-parent/pom.xml @@ -454,6 +454,28 @@ -Xlint:none + + + default-compile + compile + + compile + + + + + + + default-testCompile + test-compile + + testCompile + + + false + + + org.jacoco @@ -568,6 +590,8 @@ maven-surefire-plugin ${version.surefire.plugin} + + false true @@ -575,6 +599,8 @@ maven-failsafe-plugin ${version.surefire.plugin} + + false true diff --git a/core/src/main/java/module-info.java b/core/src/main/java/module-info.java index 84ef1d7649d..f4f162477f1 100644 --- a/core/src/main/java/module-info.java +++ b/core/src/main/java/module-info.java @@ -136,6 +136,8 @@ exports ai.timefold.solver.core.preview.api.domain.metamodel; exports ai.timefold.solver.core.preview.api.domain.solution.diff; exports ai.timefold.solver.core.impl.domain.variable.declarative; + exports ai.timefold.solver.core.api.score.stream.test; + exports ai.timefold.solver.core.impl.score.stream.test; requires commons.math3; requires jakarta.xml.bind; diff --git a/quarkus-integration/pom.xml b/quarkus-integration/pom.xml index 91eec00eeec..31194accda2 100644 --- a/quarkus-integration/pom.xml +++ b/quarkus-integration/pom.xml @@ -40,6 +40,7 @@ maven-surefire-plugin + false org.jboss.logmanager.LogManager @@ -48,6 +49,7 @@ maven-failsafe-plugin + false org.jboss.logmanager.LogManager diff --git a/quarkus-integration/quarkus/deployment/src/main/java/module-info.java b/quarkus-integration/quarkus/deployment/src/main/java/module-info.java index d441725b145..be16a1b78ae 100644 --- a/quarkus-integration/quarkus/deployment/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/deployment/src/main/java/module-info.java @@ -8,10 +8,12 @@ requires io.quarkus.gizmo2; requires jakarta.cdi; requires quarkus.core; - requires org.jboss.logging; requires arc.processor; requires org.jspecify; requires io.quarkus.gizmo; - requires org.objectweb.asm; requires org.jboss.jandex; + requires io.smallrye.config; + requires org.eclipse.microprofile.config; + requires org.objectweb.asm; + requires org.jboss.logging; } \ No newline at end of file diff --git a/quarkus-integration/quarkus/pom.xml b/quarkus-integration/quarkus/pom.xml index 8d18f218942..c6ee15931fc 100644 --- a/quarkus-integration/quarkus/pom.xml +++ b/quarkus-integration/quarkus/pom.xml @@ -22,4 +22,22 @@ reflection-integration-test devui-integration-test + + + + + + org.eclipse.microprofile.config + microprofile-config-api + 3.1.1-RC1 + compile + + + + + + org.eclipse.microprofile.config + microprofile-config-api + + diff --git a/quarkus-integration/quarkus/runtime/src/main/java/module-info.java b/quarkus-integration/quarkus/runtime/src/main/java/module-info.java index ed57a66c49d..a7139cdc39e 100644 --- a/quarkus-integration/quarkus/runtime/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/runtime/src/main/java/module-info.java @@ -11,8 +11,10 @@ requires jakarta.cdi; requires jakarta.inject; requires org.graalvm.nativeimage; - requires org.jboss.logging; requires org.jspecify; requires quarkus.core; - requires smallrye.config.core; + requires io.smallrye.config; + requires org.eclipse.microprofile.config; + requires org.jboss.logging; + } \ No newline at end of file diff --git a/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java b/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java index 8f2558d17bd..830c1f40544 100644 --- a/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java +++ b/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java @@ -9,7 +9,6 @@ requires spring.core; requires tools.jackson.databind; requires timefold.solver.benchmark; - requires timefold.solver.test; requires ai.timefold.solver.core; requires org.jspecify; } \ No newline at end of file From d74a4e808dd663ad2bcc6a043dd8314ea3a1d47a Mon Sep 17 00:00:00 2001 From: Tom Cools Date: Thu, 26 Feb 2026 23:13:40 +0100 Subject: [PATCH 3/5] chore: align module names to ai.timefold. --- core/src/main/java/module-info.java | 88 ++++++++++--------- .../deployment/src/main/java/module-info.java | 4 +- .../src/main/java/module-info.java | 2 +- .../runtime/src/main/java/module-info.java | 2 +- .../deployment/src/main/java/module-info.java | 4 +- .../src/main/java/module-info.java | 2 +- .../src/main/java/module-info.java | 2 +- .../src/main/java/module-info.java | 2 +- .../runtime/src/main/java/module-info.java | 2 +- .../src/main/java/module-info.java | 4 +- .../src/main/java/module-info.java | 2 +- .../src/main/java/module-info.java | 4 +- .../benchmark/src/main/java/module-info.java | 2 +- .../migration/src/main/java/module-info.java | 2 +- 14 files changed, 62 insertions(+), 60 deletions(-) diff --git a/core/src/main/java/module-info.java b/core/src/main/java/module-info.java index f4f162477f1..1ef3a61a038 100644 --- a/core/src/main/java/module-info.java +++ b/core/src/main/java/module-info.java @@ -1,59 +1,61 @@ open module ai.timefold.solver.core { // explicit exports to other modules exports ai.timefold.solver.core.impl.solver.scope to - ai.timefold.solver.jackson, timefold.solver.benchmark, timefold.solver.spring.boot.autoconfigure, - timefold.solver.quarkus.deployment, timefold.solver.quarkus.integration.test; + ai.timefold.solver.jackson, ai.timefold.solver.benchmark, ai.timefold.solver.spring.boot.autoconfigure, + ai.timefold.solver.quarkus.deployment, ai.timefold.solver.quarkus.integration.test; exports ai.timefold.solver.core.impl.constructionheuristic.event to - ai.timefold.solver.jackson, timefold.solver.benchmark; + ai.timefold.solver.jackson, ai.timefold.solver.benchmark; exports ai.timefold.solver.core.impl.constructionheuristic.scope to - ai.timefold.solver.jackson, timefold.solver.benchmark; + ai.timefold.solver.jackson, ai.timefold.solver.benchmark; exports ai.timefold.solver.core.impl.io.jaxb to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.spring.boot.autoconfigure, - timefold.solver.benchmark, timefold.solver.spring.boot.autoconfigure, timefold.solver.spring.boot.it, - timefold.solver.quarkus; + ai.timefold.solver.benchmark, ai.timefold.solver.spring.boot.it, + ai.timefold.solver.quarkus; exports ai.timefold.solver.core.impl.domain.entity.descriptor - to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, timefold.solver.benchmark, - timefold.solver.spring.boot.autoconfigure, timefold.solver.quarkus.integration.test, timefold.solver.quarkus, - timefold.solver.quarkus.jackson; - exports ai.timefold.solver.core.impl.domain.solution to ai.timefold.solver.jackson, timefold.solver.quarkus.jackson; + to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.benchmark, + ai.timefold.solver.spring.boot.autoconfigure, ai.timefold.solver.quarkus.integration.test, + ai.timefold.solver.quarkus, + ai.timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.domain.solution to ai.timefold.solver.jackson, ai.timefold.solver.quarkus.jackson; exports ai.timefold.solver.core.impl.domain.solution.descriptor to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.test, ai.timefold.solver.core.test, - timefold.solver.benchmark, timefold.solver.spring.boot.autoconfigure, timefold.solver.test, - timefold.solver.quarkus.integration.test, timefold.solver.quarkus, timefold.solver.quarkus.deployment, - timefold.solver.quarkus.jackson; + ai.timefold.solver.benchmark, ai.timefold.solver.spring.boot.autoconfigure, + ai.timefold.solver.quarkus.integration.test, ai.timefold.solver.quarkus, ai.timefold.solver.quarkus.deployment, + ai.timefold.solver.quarkus.jackson; exports ai.timefold.solver.core.impl.domain.variable.descriptor - to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, timefold.solver.benchmark, - timefold.solver.quarkus, timefold.solver.quarkus.jackson; + to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.benchmark, + ai.timefold.solver.quarkus, ai.timefold.solver.quarkus.jackson; exports ai.timefold.solver.core.impl.util - to ai.timefold.solver.jackson, ai.timefold.solver.test, timefold.solver.benchmark, timefold.solver.test, - timefold.solver.quarkus.deployment, timefold.solver.quarkus.jackson; + to ai.timefold.solver.jackson, ai.timefold.solver.test, ai.timefold.solver.benchmark, + ai.timefold.solver.quarkus.deployment, ai.timefold.solver.quarkus.jackson; exports ai.timefold.solver.core.impl.score.stream to ai.timefold.solver.jackson; - exports ai.timefold.solver.core.impl.score.stream.collector to ai.timefold.solver.jackson, timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.score.stream.collector + to ai.timefold.solver.jackson, ai.timefold.solver.quarkus.jackson; exports ai.timefold.solver.core.impl.solver - to ai.timefold.solver.jackson, ai.timefold.solver.spring.boot.autoconfigure, - timefold.solver.spring.boot.autoconfigure, timefold.solver.benchmark, timefold.solver.quarkus, - timefold.solver.quarkus.deployment, timefold.solver.quarkus.integration.test, timefold.solver.quarkus.jackson; - exports ai.timefold.solver.core.impl.io.jaxb.adapter to ai.timefold.solver.benchmark, timefold.solver.benchmark; + to ai.timefold.solver.jackson, ai.timefold.solver.spring.boot.autoconfigure, ai.timefold.solver.benchmark, + ai.timefold.solver.quarkus, + ai.timefold.solver.quarkus.deployment, ai.timefold.solver.quarkus.integration.test, + ai.timefold.solver.quarkus.jackson; + exports ai.timefold.solver.core.impl.io.jaxb.adapter to ai.timefold.solver.benchmark; exports ai.timefold.solver.core.impl.score.definition - to ai.timefold.solver.test, timefold.solver.benchmark, timefold.solver.test; - exports ai.timefold.solver.core.impl.heuristic.selector to ai.timefold.solver.jackson, timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.heuristic.selector.entity to ai.timefold.solver.jackson, timefold.solver.benchmark; + to ai.timefold.solver.test, ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector.entity to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; exports ai.timefold.solver.core.impl.heuristic.selector.entity.pillar - to ai.timefold.solver.jackson, timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.heuristic.selector.move to ai.timefold.solver.jackson, timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.heuristic.selector.value to ai.timefold.solver.jackson, timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.localsearch.event to ai.timefold.solver.jackson, timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.phase.event to ai.timefold.solver.jackson, timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.phase.scope to ai.timefold.solver.jackson, timefold.solver.benchmark; + to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector.move to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.heuristic.selector.value to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.localsearch.event to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.phase.event to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.phase.scope to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; exports ai.timefold.solver.core.impl.heuristic.selector.common.nearby to ai.timefold.solver.jackson, - timefold.solver.benchmark, - timefold.solver.benchmark.aggregator, - ai.timefold.solver.spring.boot.autoconfigure, - timefold.solver.spring.boot.autoconfigure, timefold.solver.quarkus.deployment; - exports ai.timefold.solver.core.impl.score.constraint to timefold.solver.benchmark, timefold.solver.test; - exports ai.timefold.solver.core.impl.partitionedsearch.partitioner to timefold.solver.quarkus.deployment; - exports ai.timefold.solver.core.impl.heuristic.selector.common.decorator to timefold.solver.quarkus.deployment; + ai.timefold.solver.benchmark, + ai.timefold.solver.benchmark.aggregator, + ai.timefold.solver.spring.boot.autoconfigure, ai.timefold.solver.quarkus.deployment; + exports ai.timefold.solver.core.impl.score.constraint to ai.timefold.solver.benchmark, ai.timefold.solver.test; + exports ai.timefold.solver.core.impl.partitionedsearch.partitioner to ai.timefold.solver.quarkus.deployment; + exports ai.timefold.solver.core.impl.heuristic.selector.common.decorator to ai.timefold.solver.quarkus.deployment; // IMPL usage exports ai.timefold.solver.core.impl.solver.thread; @@ -71,12 +73,12 @@ exports ai.timefold.solver.core.impl.domain.common.accessor; exports ai.timefold.solver.core.impl.domain.common; exports ai.timefold.solver.core.impl.domain.common.accessor.gizmo; - exports ai.timefold.solver.core.impl.score to timefold.solver.benchmark, timefold.solver.test; - exports ai.timefold.solver.core.impl.score.trend to timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.score to ai.timefold.solver.benchmark, ai.timefold.solver.test; + exports ai.timefold.solver.core.impl.score.trend to ai.timefold.solver.benchmark; exports ai.timefold.solver.core.impl.score.director; - exports ai.timefold.solver.core.impl.score.director.easy to timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.score.director.incremental to timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.solver.monitoring to timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.score.director.easy to ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.score.director.incremental to ai.timefold.solver.benchmark; + exports ai.timefold.solver.core.impl.solver.monitoring to ai.timefold.solver.benchmark; exports ai.timefold.solver.core.impl.solver.termination; // expected exports diff --git a/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java index f44408df532..975e6e92f98 100644 --- a/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java +++ b/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java @@ -1,6 +1,6 @@ -open module timefold.solver.quarkus.jackson.deployment { +open module ai.timefold.solver.quarkus.jackson.deployment { requires quarkus.core.deployment; requires quarkus.jackson.spi; - requires timefold.solver.quarkus.jackson; + requires ai.timefold.solver.quarkus.jackson; requires quarkus.core; } \ No newline at end of file diff --git a/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java index bfcd1d28a4d..7bc214fc7b9 100644 --- a/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java +++ b/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module timefold.solver.quarkus.jackson.integration.test { +open module ai.timefold.solver.quarkus.jackson.integration.test { requires ai.timefold.solver.core; requires jakarta.inject; requires jakarta.ws.rs; diff --git a/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java index 295ee55db64..7aa8d6685d6 100644 --- a/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java +++ b/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module timefold.solver.quarkus.jackson { +open module ai.timefold.solver.quarkus.jackson { exports ai.timefold.solver.quarkus.jackson; requires ai.timefold.solver.core; diff --git a/quarkus-integration/quarkus/deployment/src/main/java/module-info.java b/quarkus-integration/quarkus/deployment/src/main/java/module-info.java index be16a1b78ae..8718f8acc3e 100644 --- a/quarkus-integration/quarkus/deployment/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/deployment/src/main/java/module-info.java @@ -1,5 +1,5 @@ -open module timefold.solver.quarkus.deployment { - requires timefold.solver.quarkus; +open module ai.timefold.solver.quarkus.deployment { + requires ai.timefold.solver.quarkus; requires quarkus.arc.deployment; requires quarkus.builder; requires quarkus.core.deployment; diff --git a/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java index 31a062b36a5..544f789e00a 100644 --- a/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module timefold.solver.quarkus.devui.integration.test { +open module ai.timefold.solver.quarkus.devui.integration.test { requires ai.timefold.solver.core; requires org.jspecify; } \ No newline at end of file diff --git a/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java index 2667d7f0a41..a2d2b48efe1 100644 --- a/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module timefold.solver.quarkus.integration.test { +open module ai.timefold.solver.quarkus.integration.test { requires ai.timefold.solver.core; requires jakarta.inject; requires jakarta.ws.rs; diff --git a/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java index bf09a111900..34a32fa951a 100644 --- a/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module timefold.solver.quarkus.reflection.integration.test { +open module ai.timefold.solver.quarkus.reflection.integration.test { requires ai.timefold.solver.core; requires jakarta.inject; requires jakarta.ws.rs; diff --git a/quarkus-integration/quarkus/runtime/src/main/java/module-info.java b/quarkus-integration/quarkus/runtime/src/main/java/module-info.java index a7139cdc39e..28345f35adf 100644 --- a/quarkus-integration/quarkus/runtime/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/runtime/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module timefold.solver.quarkus { +open module ai.timefold.solver.quarkus { exports ai.timefold.solver.quarkus.bean; exports ai.timefold.solver.quarkus; exports ai.timefold.solver.quarkus.config; diff --git a/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java b/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java index 830c1f40544..fea246c2072 100644 --- a/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java +++ b/spring-integration/spring-boot-autoconfigure/src/main/java/module-info.java @@ -1,4 +1,4 @@ -module timefold.solver.spring.boot.autoconfigure { +module ai.timefold.solver.spring.boot.autoconfigure { requires ai.timefold.solver.jackson; requires org.apache.commons.logging; requires spring.beans; @@ -8,7 +8,7 @@ requires spring.context; requires spring.core; requires tools.jackson.databind; - requires timefold.solver.benchmark; + requires ai.timefold.solver.benchmark; requires ai.timefold.solver.core; requires org.jspecify; } \ No newline at end of file diff --git a/spring-integration/spring-boot-integration-test/src/main/java/module-info.java b/spring-integration/spring-boot-integration-test/src/main/java/module-info.java index 2c71b3e2980..695b11cdb35 100644 --- a/spring-integration/spring-boot-integration-test/src/main/java/module-info.java +++ b/spring-integration/spring-boot-integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -module timefold.solver.spring.boot.it { +module ai.timefold.solver.spring.boot.it { requires ai.timefold.solver.core; requires org.jspecify; requires spring.boot; diff --git a/tools/benchmark-aggregator/src/main/java/module-info.java b/tools/benchmark-aggregator/src/main/java/module-info.java index 9777260458f..300ede41d0d 100644 --- a/tools/benchmark-aggregator/src/main/java/module-info.java +++ b/tools/benchmark-aggregator/src/main/java/module-info.java @@ -1,5 +1,5 @@ -module timefold.solver.benchmark.aggregator { +module ai.timefold.solver.benchmark.aggregator { requires java.desktop; - requires timefold.solver.benchmark; + requires ai.timefold.solver.benchmark; requires org.slf4j; } \ No newline at end of file diff --git a/tools/benchmark/src/main/java/module-info.java b/tools/benchmark/src/main/java/module-info.java index 7390058610d..633223ff5c7 100644 --- a/tools/benchmark/src/main/java/module-info.java +++ b/tools/benchmark/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module timefold.solver.benchmark { +open module ai.timefold.solver.benchmark { requires ai.timefold.solver.jaxb; requires ai.timefold.solver.persistence.common; requires freemarker; diff --git a/tools/migration/src/main/java/module-info.java b/tools/migration/src/main/java/module-info.java index 726c9ff526f..21e27bef811 100644 --- a/tools/migration/src/main/java/module-info.java +++ b/tools/migration/src/main/java/module-info.java @@ -1,4 +1,4 @@ -module timefold.solver.migration { +module ai.timefold.solver.migration { requires rewrite.core; requires rewrite.java; } \ No newline at end of file From 754e94e594ed2fa537fcd947bd05cd78cd9c6525 Mon Sep 17 00:00:00 2001 From: Tom Cools Date: Fri, 27 Feb 2026 13:54:52 +0100 Subject: [PATCH 4/5] chore: remove opens module --- core/src/main/java/module-info.java | 147 ++++++++++++------ .../jackson/src/main/java/module-info.java | 2 +- .../jaxb/src/main/java/module-info.java | 2 +- .../deployment/src/main/java/module-info.java | 2 +- .../src/main/java/module-info.java | 2 +- .../runtime/src/main/java/module-info.java | 2 +- .../deployment/src/main/java/module-info.java | 7 +- .../src/main/java/module-info.java | 2 +- .../src/main/java/module-info.java | 2 +- .../src/main/java/module-info.java | 2 +- .../runtime/src/main/java/module-info.java | 2 +- .../src/main/java/module-info.java | 2 +- .../benchmark/src/main/java/module-info.java | 2 +- 13 files changed, 116 insertions(+), 60 deletions(-) diff --git a/core/src/main/java/module-info.java b/core/src/main/java/module-info.java index 1ef3a61a038..62276dd3329 100644 --- a/core/src/main/java/module-info.java +++ b/core/src/main/java/module-info.java @@ -1,63 +1,124 @@ -open module ai.timefold.solver.core { +module ai.timefold.solver.core { // explicit exports to other modules exports ai.timefold.solver.core.impl.solver.scope to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, ai.timefold.solver.spring.boot.autoconfigure, - ai.timefold.solver.quarkus.deployment, ai.timefold.solver.quarkus.integration.test; + ai.timefold.solver.quarkus.deployment, ai.timefold.solver.quarkus.integration.test, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.constructionheuristic.event to - ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.constructionheuristic.scope to - ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.io.jaxb to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.spring.boot.autoconfigure, - ai.timefold.solver.benchmark, ai.timefold.solver.spring.boot.it, - ai.timefold.solver.quarkus; + ai.timefold.solver.benchmark, + ai.timefold.solver.quarkus, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.domain.entity.descriptor to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.benchmark, ai.timefold.solver.spring.boot.autoconfigure, ai.timefold.solver.quarkus.integration.test, ai.timefold.solver.quarkus, - ai.timefold.solver.quarkus.jackson; - exports ai.timefold.solver.core.impl.domain.solution to ai.timefold.solver.jackson, ai.timefold.solver.quarkus.jackson; - exports ai.timefold.solver.core.impl.domain.solution.descriptor - to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.test, ai.timefold.solver.core.test, - ai.timefold.solver.benchmark, ai.timefold.solver.spring.boot.autoconfigure, - ai.timefold.solver.quarkus.integration.test, ai.timefold.solver.quarkus, ai.timefold.solver.quarkus.deployment, - ai.timefold.solver.quarkus.jackson; + ai.timefold.solver.quarkus.jackson, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.domain.solution to ai.timefold.solver.jackson, ai.timefold.solver.quarkus.jackson, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.domain.variable.descriptor to ai.timefold.solver.jackson, ai.timefold.solver.jaxb, ai.timefold.solver.benchmark, - ai.timefold.solver.quarkus, ai.timefold.solver.quarkus.jackson; + ai.timefold.solver.quarkus, ai.timefold.solver.quarkus.jackson, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.util - to ai.timefold.solver.jackson, ai.timefold.solver.test, ai.timefold.solver.benchmark, - ai.timefold.solver.quarkus.deployment, ai.timefold.solver.quarkus.jackson; - exports ai.timefold.solver.core.impl.score.stream to ai.timefold.solver.jackson; + to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.quarkus.deployment, ai.timefold.solver.quarkus.jackson, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.score.stream to ai.timefold.solver.jackson, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.score.stream.collector - to ai.timefold.solver.jackson, ai.timefold.solver.quarkus.jackson; + to ai.timefold.solver.jackson, ai.timefold.solver.quarkus.jackson, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.solver to ai.timefold.solver.jackson, ai.timefold.solver.spring.boot.autoconfigure, ai.timefold.solver.benchmark, ai.timefold.solver.quarkus, ai.timefold.solver.quarkus.deployment, ai.timefold.solver.quarkus.integration.test, - ai.timefold.solver.quarkus.jackson; - exports ai.timefold.solver.core.impl.io.jaxb.adapter to ai.timefold.solver.benchmark; + ai.timefold.solver.quarkus.jackson, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.io.jaxb.adapter to ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.score.definition - to ai.timefold.solver.test, ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.heuristic.selector to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.heuristic.selector.entity to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + to ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.entity to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.heuristic.selector.entity.pillar - to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.heuristic.selector.move to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.heuristic.selector.value to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.localsearch.event to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.phase.event to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.phase.scope to ai.timefold.solver.jackson, ai.timefold.solver.benchmark; + to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.move to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.value to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.localsearch.event to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.phase.event to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.phase.scope to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; exports ai.timefold.solver.core.impl.heuristic.selector.common.nearby to ai.timefold.solver.jackson, ai.timefold.solver.benchmark, ai.timefold.solver.benchmark.aggregator, - ai.timefold.solver.spring.boot.autoconfigure, ai.timefold.solver.quarkus.deployment; - exports ai.timefold.solver.core.impl.score.constraint to ai.timefold.solver.benchmark, ai.timefold.solver.test; - exports ai.timefold.solver.core.impl.partitionedsearch.partitioner to ai.timefold.solver.quarkus.deployment; - exports ai.timefold.solver.core.impl.heuristic.selector.common.decorator to ai.timefold.solver.quarkus.deployment; + ai.timefold.solver.spring.boot.autoconfigure, ai.timefold.solver.quarkus.deployment, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.score.constraint to ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.partitionedsearch.partitioner to ai.timefold.solver.quarkus.deployment, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.common.decorator to ai.timefold.solver.quarkus.deployment, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.score to ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.score.trend to ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.score.director; + exports ai.timefold.solver.core.impl.score.director.easy to ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.score.director.incremental to ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.solver.monitoring to ai.timefold.solver.benchmark, + ai.timefold.solver.enterprise.core; + + // Preview APIs + exports ai.timefold.solver.core.preview.api.move; + exports ai.timefold.solver.core.preview.api.move.builtin; + exports ai.timefold.solver.core.preview.api.domain.metamodel; + exports ai.timefold.solver.core.preview.api.domain.solution.diff; + exports ai.timefold.solver.core.api.score.stream.test; + + // enterprise specific exports + exports ai.timefold.solver.core.impl.bavet.common to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.constructionheuristic.decider to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.constructionheuristic.decider.forager to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.domain.variable to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.domain.variable.supply to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.domain.variable.listener.support to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.common to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.common.iterator to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.entity.mimic to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.list.mimic to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.heuristic.selector.value.mimic to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.localsearch.decider to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.localsearch.decider.acceptor to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.localsearch.decider.forager to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.move to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.neighborhood to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.partitionedsearch to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.phase to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.solver.recaller to ai.timefold.solver.enterprise.core; + exports ai.timefold.solver.core.impl.solver.event to ai.timefold.solver.enterprise.core; - // IMPL usage + // Broad impl usage exports ai.timefold.solver.core.impl.solver.thread; exports ai.timefold.solver.core.impl.heuristic.move; exports ai.timefold.solver.core.impl.localsearch.scope; @@ -73,13 +134,10 @@ exports ai.timefold.solver.core.impl.domain.common.accessor; exports ai.timefold.solver.core.impl.domain.common; exports ai.timefold.solver.core.impl.domain.common.accessor.gizmo; - exports ai.timefold.solver.core.impl.score to ai.timefold.solver.benchmark, ai.timefold.solver.test; - exports ai.timefold.solver.core.impl.score.trend to ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.score.director; - exports ai.timefold.solver.core.impl.score.director.easy to ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.score.director.incremental to ai.timefold.solver.benchmark; - exports ai.timefold.solver.core.impl.solver.monitoring to ai.timefold.solver.benchmark; exports ai.timefold.solver.core.impl.solver.termination; + exports ai.timefold.solver.core.impl.domain.variable.declarative; + exports ai.timefold.solver.core.impl.score.stream.test; + // expected exports exports ai.timefold.solver.core.api.domain.common; @@ -110,6 +168,7 @@ exports ai.timefold.solver.core.config.heuristic.selector.move.factory; exports ai.timefold.solver.core.config.heuristic.selector.move.composite; exports ai.timefold.solver.core.config.heuristic.selector.move.generic; + exports ai.timefold.solver.core.config.heuristic.selector.move.generic.list; exports ai.timefold.solver.core.config.heuristic.selector.value; exports ai.timefold.solver.core.config.heuristic.selector.common; exports ai.timefold.solver.core.config.heuristic.selector.common.decorator; @@ -133,14 +192,6 @@ exports ai.timefold.solver.core.config.constructionheuristic; exports ai.timefold.solver.core.enterprise; - // Preview APIs - exports ai.timefold.solver.core.preview.api.move; - exports ai.timefold.solver.core.preview.api.domain.metamodel; - exports ai.timefold.solver.core.preview.api.domain.solution.diff; - exports ai.timefold.solver.core.impl.domain.variable.declarative; - exports ai.timefold.solver.core.api.score.stream.test; - exports ai.timefold.solver.core.impl.score.stream.test; - requires commons.math3; requires jakarta.xml.bind; requires java.xml; diff --git a/persistence/jackson/src/main/java/module-info.java b/persistence/jackson/src/main/java/module-info.java index 2c2897b5360..50c217e3771 100644 --- a/persistence/jackson/src/main/java/module-info.java +++ b/persistence/jackson/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.jackson { +module ai.timefold.solver.jackson { exports ai.timefold.solver.jackson.api; provides tools.jackson.databind.JacksonModule with diff --git a/persistence/jaxb/src/main/java/module-info.java b/persistence/jaxb/src/main/java/module-info.java index b6724bb0011..673b4e2001b 100644 --- a/persistence/jaxb/src/main/java/module-info.java +++ b/persistence/jaxb/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.jaxb { +module ai.timefold.solver.jaxb { exports ai.timefold.solver.jaxb.api.score; requires ai.timefold.solver.persistence.common; diff --git a/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java index 975e6e92f98..ed0cae68dd9 100644 --- a/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java +++ b/quarkus-integration/quarkus-jackson/deployment/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.quarkus.jackson.deployment { +module ai.timefold.solver.quarkus.jackson.deployment { requires quarkus.core.deployment; requires quarkus.jackson.spi; requires ai.timefold.solver.quarkus.jackson; diff --git a/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java index 7bc214fc7b9..90b8883a924 100644 --- a/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java +++ b/quarkus-integration/quarkus-jackson/integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.quarkus.jackson.integration.test { +module ai.timefold.solver.quarkus.jackson.integration.test { requires ai.timefold.solver.core; requires jakarta.inject; requires jakarta.ws.rs; diff --git a/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java b/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java index 7aa8d6685d6..9f35864b240 100644 --- a/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java +++ b/quarkus-integration/quarkus-jackson/runtime/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.quarkus.jackson { +module ai.timefold.solver.quarkus.jackson { exports ai.timefold.solver.quarkus.jackson; requires ai.timefold.solver.core; diff --git a/quarkus-integration/quarkus/deployment/src/main/java/module-info.java b/quarkus-integration/quarkus/deployment/src/main/java/module-info.java index 8718f8acc3e..dac5e5ce099 100644 --- a/quarkus-integration/quarkus/deployment/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/deployment/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.quarkus.deployment { +module ai.timefold.solver.quarkus.deployment { requires ai.timefold.solver.quarkus; requires quarkus.arc.deployment; requires quarkus.builder; @@ -16,4 +16,9 @@ requires org.eclipse.microprofile.config; requires org.objectweb.asm; requires org.jboss.logging; + + // Enterprise exports + exports ai.timefold.solver.quarkus.deployment to ai.timefold.solver.enterprise.quarkus.deployment; + exports ai.timefold.solver.quarkus.deployment.config to ai.timefold.solver.enterprise.quarkus.deployment; + exports ai.timefold.solver.quarkus.deployment.api to ai.timefold.solver.enterprise.quarkus.deployment; } \ No newline at end of file diff --git a/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java index 544f789e00a..49e9c0433a2 100644 --- a/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/devui-integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.quarkus.devui.integration.test { +module ai.timefold.solver.quarkus.devui.integration.test { requires ai.timefold.solver.core; requires org.jspecify; } \ No newline at end of file diff --git a/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java index a2d2b48efe1..a123ebdef78 100644 --- a/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.quarkus.integration.test { +module ai.timefold.solver.quarkus.integration.test { requires ai.timefold.solver.core; requires jakarta.inject; requires jakarta.ws.rs; diff --git a/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java b/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java index 34a32fa951a..61acd4909bf 100644 --- a/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/reflection-integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.quarkus.reflection.integration.test { +module ai.timefold.solver.quarkus.reflection.integration.test { requires ai.timefold.solver.core; requires jakarta.inject; requires jakarta.ws.rs; diff --git a/quarkus-integration/quarkus/runtime/src/main/java/module-info.java b/quarkus-integration/quarkus/runtime/src/main/java/module-info.java index 28345f35adf..999d2ef794c 100644 --- a/quarkus-integration/quarkus/runtime/src/main/java/module-info.java +++ b/quarkus-integration/quarkus/runtime/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.quarkus { +module ai.timefold.solver.quarkus { exports ai.timefold.solver.quarkus.bean; exports ai.timefold.solver.quarkus; exports ai.timefold.solver.quarkus.config; diff --git a/spring-integration/spring-boot-integration-test/src/main/java/module-info.java b/spring-integration/spring-boot-integration-test/src/main/java/module-info.java index 695b11cdb35..a002a95c561 100644 --- a/spring-integration/spring-boot-integration-test/src/main/java/module-info.java +++ b/spring-integration/spring-boot-integration-test/src/main/java/module-info.java @@ -1,4 +1,4 @@ -module ai.timefold.solver.spring.boot.it { +module ai.timefold.solver.spring.boot.integration.test { requires ai.timefold.solver.core; requires org.jspecify; requires spring.boot; diff --git a/tools/benchmark/src/main/java/module-info.java b/tools/benchmark/src/main/java/module-info.java index 633223ff5c7..01ba2c1e2a7 100644 --- a/tools/benchmark/src/main/java/module-info.java +++ b/tools/benchmark/src/main/java/module-info.java @@ -1,4 +1,4 @@ -open module ai.timefold.solver.benchmark { +module ai.timefold.solver.benchmark { requires ai.timefold.solver.jaxb; requires ai.timefold.solver.persistence.common; requires freemarker; From 728adcd2446533c2f1e4abc16eae0dea0c283f29 Mon Sep 17 00:00:00 2001 From: Tom Cools Date: Fri, 27 Feb 2026 14:46:51 +0100 Subject: [PATCH 5/5] chore: fix missing import --- core/src/main/java/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/module-info.java b/core/src/main/java/module-info.java index 62276dd3329..9be51ef0fd6 100644 --- a/core/src/main/java/module-info.java +++ b/core/src/main/java/module-info.java @@ -131,6 +131,7 @@ exports ai.timefold.solver.core.impl.score.director.stream; exports ai.timefold.solver.core.impl.score.stream.bavet; exports ai.timefold.solver.core.impl.domain.solution.cloner.gizmo; + exports ai.timefold.solver.core.impl.domain.solution.descriptor; exports ai.timefold.solver.core.impl.domain.common.accessor; exports ai.timefold.solver.core.impl.domain.common; exports ai.timefold.solver.core.impl.domain.common.accessor.gizmo; @@ -138,7 +139,6 @@ exports ai.timefold.solver.core.impl.domain.variable.declarative; exports ai.timefold.solver.core.impl.score.stream.test; - // expected exports exports ai.timefold.solver.core.api.domain.common; exports ai.timefold.solver.core.api.domain.entity;