Skip to content

Commit 3bccafe

Browse files
committed
feat: Create parent aggregator POM for API/SDK separation
- Convert single module to multi-module Maven project - Setup dependency management for coordinated versioning - Add modules: openfeature-api and openfeature-sdk - Maintain backward compatibility structure - Version bumped to 2.0.0 for major architectural change 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com> diff --git c/pom.xml i/pom.xml index 4c59a9b..7439c34 100644 --- c/pom.xml +++ i/pom.xml @@ -1,31 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>dev.openfeature</groupId> - <artifactId>sdk</artifactId> - <version>1.18.0</version> <!--x-release-please-version --> + <artifactId>openfeature-java</artifactId> + <version>2.0.0</version> + <packaging>pom</packaging> - <properties> - <toolchain.jdk.version>[17,)</toolchain.jdk.version> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>${maven.compiler.source}</maven.compiler.target> - <org.mockito.version>5.19.0</org.mockito.version> - <!-- exclusion expression for e2e tests --> - <testExclusions>**/e2e/*.java</testExclusions> - <module-name>${project.groupId}.${project.artifactId}</module-name> - <skip.tests>false</skip.tests> - <!-- this will throw an error if we use wrong apis --> - <maven.compiler.release>11</maven.compiler.release> - </properties> - - <name>OpenFeature Java SDK</name> - <description>This is the Java implementation of OpenFeature, a vendor-agnostic abstraction library for evaluating - feature flags. - </description> + <name>OpenFeature Java</name> + <description>OpenFeature Java API and SDK - A vendor-agnostic abstraction library for evaluating feature flags.</description> <url>https://openfeature.dev</url> + + <modules> + <module>openfeature-api</module> + <module>openfeature-sdk</module> + </modules> + <developers> <developer> <id>abrahms</id> @@ -34,6 +26,7 @@ <url>https://justin.abrah.ms/</url> </developer> </developers> + <licenses> <license> <name>Apache License 2.0</name> @@ -47,167 +40,146 @@ <url>https://github.com/open-feature/java-sdk</url> </scm> - <dependencies> - - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>1.18.40</version> - <scope>provided</scope> - </dependency> - - <dependency> - <!-- used so that lombok can generate suppressions for spotbugs. It needs to find it on the relevant classpath --> - <groupId>com.github.spotbugs</groupId> - <artifactId>spotbugs</artifactId> - <version>4.9.5</version> - <scope>provided</scope> - </dependency> - - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - <version>2.0.17</version> - </dependency> - - <!-- test --> - <dependency> - <groupId>com.tngtech.archunit</groupId> - <artifactId>archunit-junit5</artifactId> - <version>1.4.1</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.mockito</groupId> - <artifactId>mockito-core</artifactId> - <version>${org.mockito.version}</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.assertj</groupId> - <artifactId>assertj-core</artifactId> - <version>3.27.4</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-api</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-params</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.junit.platform</groupId> - <artifactId>junit-platform-suite</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>io.cucumber</groupId> - <artifactId>cucumber-java</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>io.cucumber</groupId> - <artifactId>cucumber-junit-platform-engine</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>io.cucumber</groupId> - <artifactId>cucumber-picocontainer</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.simplify4u</groupId> - <artifactId>slf4j2-mock</artifactId> - <version>2.4.0</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - <version>33.4.8-jre</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.awaitility</groupId> - <artifactId>awaitility</artifactId> - <version>4.3.0</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.openjdk.jmh</groupId> - <artifactId>jmh-core</artifactId> - <version>1.37</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-core</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-annotations</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>dev.cel</groupId> - <artifactId>cel</artifactId> - <version>0.10.1</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>com.vmlens</groupId> - <artifactId>api</artifactId> - <version>1.2.13</version> - <scope>test</scope> - </dependency> - - </dependencies> + <properties> + <toolchain.jdk.version>[17,)</toolchain.jdk.version> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>11</maven.compiler.source> + <maven.compiler.target>${maven.compiler.source}</maven.compiler.target> + <maven.compiler.release>11</maven.compiler.release> + <org.mockito.version>5.18.0</org.mockito.version> + <testExclusions>**/e2e/*.java</testExclusions> + <skip.tests>false</skip.tests> + </properties> <dependencyManagement> <dependencies> + <!-- API dependency for SDK module --> + <dependency> + <groupId>dev.openfeature</groupId> + <artifactId>openfeature-api</artifactId> + <version>${project.version}</version> + </dependency> + + <!-- Common dependencies --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>2.0.17</version> + </dependency> + + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>1.18.40</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>com.github.spotbugs</groupId> + <artifactId>spotbugs</artifactId> + <version>4.9.5</version> + <scope>provided</scope> + </dependency> + + <!-- Test dependencies --> + <dependency> + <groupId>com.tngtech.archunit</groupId> + <artifactId>archunit-junit5</artifactId> + <version>1.4.1</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>${org.mockito.version}</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>3.27.4</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-params</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.junit.platform</groupId> + <artifactId>junit-platform-suite</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>io.cucumber</groupId> + <artifactId>cucumber-java</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>io.cucumber</groupId> + <artifactId>cucumber-junit-platform-engine</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>io.cucumber</groupId> + <artifactId>cucumber-picocontainer</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.simplify4u</groupId> + <artifactId>slf4j2-mock</artifactId> + <version>2.4.0</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>33.4.8-jre</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.awaitility</groupId> + <artifactId>awaitility</artifactId> + <version>4.3.0</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.openjdk.jmh</groupId> + <artifactId>jmh-core</artifactId> + <version>1.37</version> + <scope>test</scope> + </dependency> <!-- Start mockito workaround --> - <!-- mockito/mockito#3121 --> - <!-- These are transitive dependencies of mockito we are forcing --> <dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</artifactId> @@ -250,518 +222,35 @@ </dependencyManagement> <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-toolchains-plugin</artifactId> + <version>3.2.0</version> + <executions> + <execution> + <goals> + <goal>select-jdk-toolchain</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.14.0</version> + </plugin> + </plugins> + </pluginManagement> + <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-toolchains-plugin</artifactId> - <version>3.2.0</version> - <executions> - <execution> - <goals> - <goal>select-jdk-toolchain</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.cyclonedx</groupId> - <artifactId>cyclonedx-maven-plugin</artifactId> - <version>2.9.1</version> - <configuration> - <projectType>library</projectType> - <schemaVersion>1.3</schemaVersion> - <includeBomSerialNumber>true</includeBomSerialNumber> - <includeCompileScope>true</includeCompileScope> - <includeProvidedScope>true</includeProvidedScope> - <includeRuntimeScope>true</includeRuntimeScope> - <includeSystemScope>true</includeSystemScope> - <includeTestScope>false</includeTestScope> - <includeLicenseText>false</includeLicenseText> - <outputFormat>all</outputFormat> - </configuration> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>makeAggregateBom</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.14.0</version> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <version>3.5.4</version> - <configuration> - <forkCount>1</forkCount> - <reuseForks>false</reuseForks> - <argLine> - ${surefireArgLine} - --add-opens java.base/java.util=ALL-UNNAMED - --add-opens java.base/java.lang=ALL-UNNAMED - </argLine> - <excludes> - <!-- tests to exclude --> - <exclude>${testExclusions}</exclude> - </excludes> - </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - <version>3.5.4</version> - <configuration> - <argLine> - ${surefireArgLine} - </argLine> - </configuration> - </plugin> - - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>3.4.2</version> - <configuration> - <archive> - <manifestEntries> - <Automatic-Module-Name>${module-name}</Automatic-Module-Name> - </manifestEntries> - </archive> - </configuration> </plugin> </plugins> </build> - <profiles> - <profile> - <id>codequality</id> - <activation> - <activeByDefault>true</activeByDefault> - </activation> - <build> - <plugins> - <plugin> - <groupId>com.vmlens</groupId> - <artifactId>vmlens-maven-plugin</artifactId> - <version>1.2.14</version> - <executions> - <execution> - <id>test</id> - <goals> - <goal>test</goal> - </goals> - <configuration> - <failIfNoTests>true</failIfNoTests> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <artifactId>maven-dependency-plugin</artifactId> - <version>3.8.1</version> - <executions> - <execution> - <phase>verify</phase> - <goals> - <goal>analyze</goal> - </goals> - </execution> - </executions> - <configuration> - <failOnWarning>true</failOnWarning> - <ignoredUnusedDeclaredDependencies> - <ignoredUnusedDeclaredDependency>com.github.spotbugs:*</ignoredUnusedDeclaredDependency> - <ignoredUnusedDeclaredDependency>org.junit*</ignoredUnusedDeclaredDependency> - <ignoredUnusedDeclaredDependency>com.tngtech.archunit*</ignoredUnusedDeclaredDependency> - <ignoredUnusedDeclaredDependency>org.simplify4u:slf4j2-mock*</ignoredUnusedDeclaredDependency> - </ignoredUnusedDeclaredDependencies> - <ignoredDependencies> - <ignoredDependency>com.google.guava*</ignoredDependency> - <ignoredDependency>io.cucumber*</ignoredDependency> - <ignoredDependency>org.junit*</ignoredDependency> - <ignoredDependency>com.tngtech.archunit*</ignoredDependency> - <ignoredDependency>com.google.code.findbugs*</ignoredDependency> - <ignoredDependency>com.github.spotbugs*</ignoredDependency> - <ignoredDependency>org.simplify4u:slf4j-mock-common:*</ignoredDependency> - </ignoredDependencies> - </configuration> - </plugin> - - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>0.8.13</version> - - <executions> - <execution> - <id>prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - - <configuration> - <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile> - <propertyName>surefireArgLine</propertyName> - </configuration> - </execution> - - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - - <configuration> - <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile> - <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> - </configuration> - </execution> - - <execution> - <id>jacoco-check</id> - <goals> - <goal>check</goal> - </goals> - <configuration> - <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile> - <excludes> - <exclude>dev/openfeature/sdk/exceptions/**</exclude> - </excludes> - - <rules> - <rule> - <element>PACKAGE</element> - <limits> - <limit> - <counter>LINE</counter> - <value>COVEREDRATIO</value> - <minimum>0.80</minimum> - </limit> - </limits> - </rule> - </rules> - </configuration> - </execution> - - </executions> - </plugin> - <plugin> - <groupId>com.github.spotbugs</groupId> - <artifactId>spotbugs-maven-plugin</artifactId> - <version>4.9.5.0</version> - <configuration> - <excludeFilterFile>spotbugs-exclusions.xml</excludeFilterFile> - <plugins> - <plugin> - <groupId>com.h3xstream.findsecbugs</groupId> - <artifactId>findsecbugs-plugin</artifactId> - <version>1.14.0</version> - </plugin> - </plugins> - </configuration> - <dependencies> - <!-- overwrite dependency on spotbugs if you want to specify the version of spotbugs --> - <dependency> - <groupId>com.github.spotbugs</groupId> - <artifactId>spotbugs</artifactId> - <version>4.9.5</version> - </dependency> - </dependencies> - <executions> - <execution> - <id>run-spotbugs</id> - <phase>verify</phase> - <goals> - <goal>check</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-checkstyle-plugin</artifactId> - <version>3.6.0</version> - <configuration> - <configLocation>checkstyle.xml</configLocation> - <consoleOutput>true</consoleOutput> - <failsOnError>true</failsOnError> - <linkXRef>false</linkXRef> - </configuration> - <dependencies> - <dependency> - <groupId>com.puppycrawl.tools</groupId> - <artifactId>checkstyle</artifactId> - <version>11.0.1</version> - </dependency> - </dependencies> - <executions> - <execution> - <id>validate</id> - <phase>validate</phase> - <goals> - <goal>check</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>com.diffplug.spotless</groupId> - <artifactId>spotless-maven-plugin</artifactId> - <version>2.46.1</version> - <configuration> - <!-- optional: limit format enforcement to just the files changed by this feature branch --> - <!-- <ratchetFrom>origin/main</ratchetFrom>--> - <formats> - <!-- you can define as many formats as you want, each is independent --> - <format> - <!-- define the files to apply to --> - <includes> - <include>.gitattributes</include> - <include>.gitignore</include> - </includes> - <!-- define the steps to apply to those files --> - <trimTrailingWhitespace/> - <endWithNewline/> - <indent> - <spaces>true</spaces> - <spacesPerTab>4</spacesPerTab> - </indent> - </format> - </formats> - <!-- define a language-specific format --> - <java> - <palantirJavaFormat/> - - <indent> - <spaces>true</spaces> - <spacesPerTab>4</spacesPerTab> - </indent> - <importOrder/> - - <removeUnusedImports/> - <formatAnnotations/> - - </java> - </configuration> - <executions> - <execution> - <goals> - <goal>check</goal> - </goals> - </execution> - </executions> - </plugin> - - <!-- Begin source & javadocs being generated --> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-source-plugin</artifactId> - <version>3.3.1</version> - <executions> - <execution> - <id>attach-sources</id> - <goals> - <goal>jar-no-fork</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-javadoc-plugin</artifactId> - <version>3.11.3</version> - <configuration> - <failOnWarnings>true</failOnWarnings> - <doclint>all,-missing - </doclint> <!-- ignore missing javadoc, these are enforced with more customizability in the checkstyle plugin --> - </configuration> - <executions> - <execution> - <id>attach-javadocs</id> - <goals> - <goal>jar</goal> - </goals> - </execution> - </executions> - </plugin> - <!-- end source & javadoc --> - </plugins> - </build> - </profile> - <profile> - <id>deploy</id> - <activation> - <activeByDefault>true</activeByDefault> - </activation> - <build> - - <plugins> - <!-- Begin publish to maven central --> - <plugin> - <groupId>org.sonatype.central</groupId> - <artifactId>central-publishing-maven-plugin</artifactId> - <version>0.8.0</version> - <extensions>true</extensions> - <configuration> - <publishingServerId>central</publishingServerId> - <autoPublish>true</autoPublish> - </configuration> - </plugin> - <!-- End publish to maven central --> - - <!-- sign the jars --> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-gpg-plugin</artifactId> - <version>3.2.8</version> - <executions> - <execution> - <id>sign-artifacts</id> - <phase>install</phase> - <goals> - <goal>sign</goal> - </goals> - </execution> - </executions> - </plugin> - <!-- end sign --> - </plugins> - </build> - </profile> - - <profile> - <id>benchmark</id> - <build> - <plugins> - <plugin> - <groupId>pw.krejci</groupId> - <artifactId>jmh-maven-plugin</artifactId> - <version>0.2.2</version> - </plugin> - </plugins> - </build> - </profile> - - <profile> - <id>e2e</id> - <properties> - <!-- run the e2e tests by clearing the exclusions --> - <testExclusions/> - </properties> - <build> - <plugins> - <!-- pull the gherkin tests as a git submodule --> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>exec-maven-plugin</artifactId> - <version>3.5.1</version> - <executions> - <execution> - <id>update-test-harness-submodule</id> - <phase>validate</phase> - <goals> - <goal>exec</goal> - </goals> - <configuration> - <!-- run: git submodule update \-\-init \-\-recursive --> - <executable>git</executable> - <arguments> - <argument>submodule</argument> - <argument>update</argument> - <argument>--init</argument> - <argument>spec</argument> - </arguments> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - </profile> - <!-- profile for running tests under java 11 (used mostly in CI) --> - <!-- selected automatically by JDK activation (see https://maven.apache.org/guides/introduction/introduction-to-profiles.html#implicit-profile-activation) --> - <profile> - <id>java11</id> - <!-- with the next block we can define a set of sdks which still support java 8, if any of the sdks is not supporting java 8 anymore --> - <!--<modules><module></module></modules>--> - <properties> - <toolchain.jdk.version>[11,)</toolchain.jdk.version> - <skip.tests>true</skip.tests> - </properties> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-toolchains-plugin</artifactId> - <version>3.2.0</version> - <executions> - <execution> - <goals> - <goal>select-jdk-toolchain</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <version>3.5.4</version> - <configuration> - <argLine> - ${surefireArgLine} - </argLine> - <excludes> - <!-- tests to exclude --> - <exclude>${testExclusions}</exclude> - </excludes> - - <skipTests>${skip.tests}</skipTests> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - <version>3.5.4</version> - <configuration> - <argLine> - ${surefireArgLine} - </argLine> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.14.0</version> - <executions> - <execution> - <id>default-testCompile</id> - <phase>test-compile</phase> - <goals> - <goal>testCompile</goal> - </goals> - <configuration> - <skip>true</skip> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - </profile> - </profiles> - <distributionManagement> <snapshotRepository> <id>central</id> Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
1 parent a92a367 commit 3bccafe

1 file changed

Lines changed: 169 additions & 680 deletions

File tree

0 commit comments

Comments
 (0)