helidon-integrations-cdi-jpa
Used in:
components
- OverviewOverview
- VersionsVersions
- DependentsDependents
- DependenciesDependencies
<dependency>
<groupId>io.helidon.integrations.cdi</groupId>
<artifactId>helidon-integrations-cdi-jpa</artifactId>
<version>4.4.1</version>
</dependency><?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2019, 2026 Oracle and/or its affiliates.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.helidon.integrations.cdi</groupId>
<artifactId>helidon-integrations-cdi-project</artifactId>
<version>4.4.1</version>
</parent>
<artifactId>helidon-integrations-cdi-jpa</artifactId>
<name>Helidon CDI Integrations JPA</name>
<properties>
<doclint>-syntax</doclint>
<eclipselink.skip>false</eclipselink.skip>
<helidon.jta.immediateEnlistment>false</helidon.jta.immediateEnlistment>
<helidon.jta.interposedSynchronizations>true</helidon.jta.interposedSynchronizations>
<helidon.jta.preemptiveEnlistmentChecks>true</helidon.jta.preemptiveEnlistmentChecks>
<hibernate.skip>false</hibernate.skip>
<spotbugs.exclude>etc/spotbugs/exclude.xml</spotbugs.exclude>
</properties>
<dependencies>
<!-- Compile-scoped dependencies. -->
<dependency>
<groupId>io.helidon.integrations.cdi</groupId>
<artifactId>helidon-integrations-cdi-reference-counted-context</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.helidon.integrations.jta</groupId>
<artifactId>helidon-integrations-jta-jdbc</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<!--
In a perfect world, this would be set to provided
scope, since whatever JAXB runtime the user selects
would provide the API jar it implements, assuming of
course it's compatible with the version we select
here.
In practice, setting the scope to provided here causes
the combination of JPMS and the maven-compiler-plugin
to fail:
* The jakarta.xml.bind module uses the
jakarta.activation module (this project does not). The
jakarta.activation module is, inconveniently,
"implemented" by two possible API artifacts (!):
jakarta.activation:activation-api and
com.sun.activation:jakarta.activation. The
jakarta.xml.bind:jakarta.xml.bind-api artifact depends
on com.sun.activation:jakarta.activation, not
jakarta.activation:activation-api (as one might
naively suspect). All of this is important to the
next bullet point.
* When jakarta.xml.bind:jakarta.xml.bind-api is placed
in provided scope, the
com.sun.activation:jakarta.activation artifact's
jakarta.activation module does not end up on the
module path at compile time and a "module not found:
jakarta.activation" error is emitted.
Happily, setting the scope to compile and setting the
optional element to true, as is done here, gives the
desired provided semantics while placing the
transitive dependencies properly on the module path.
-->
<scope>compile</scope>
<optional>true</optional>
</dependency>
<!-- Provided-scoped dependencies. -->
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.microprofile.config</groupId>
<artifactId>microprofile-config-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Runtime-scoped dependencies. -->
<dependency>
<groupId>io.smallrye</groupId>
<artifactId>jandex</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<!--
In a perfect world, the scope of this dependency would
be test, properly indicating that at runtime the end
user is responsible for supplying her choice of JAXB
runtime implementation that implements
jakarta.xml.bind:jakarta.xml.bind-api (see above).
In practice, Hibernate, probably the most popular of
JPA runtimes used with this project, transitively
includes org.glassfish.jaxb:jaxb-runtime whether we or
our hypothetical end user want it or not. Eclipselink
does not.
Given (a) the predominance of Hibernate, (b) the
relative infrequence of JAXB usage by end users these
days and hence the probable lack of conflict, it
probably makes sense to just include
org.glassfish.jaxb:jaxb-runtime at runtime for minimum
disruption since in any Hibernate-using installation
it's going to be there anyway.
-->
<scope>runtime</scope> <!-- really should be test -->
</dependency>
<dependency>
<groupId>io.helidon.microprofile.config</groupId>
<artifactId>helidon-microprofile-config</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- Test-scoped dependencies. -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.helidon.microprofile.cdi</groupId>
<artifactId>helidon-microprofile-cdi</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>helidon-integrations-cdi-jta-weld</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>helidon-integrations-cdi-datasource-hikaricp</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>helidon-integrations-cdi-eclipselink</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>helidon-integrations-cdi-hibernate</artifactId>
<scope>test</scope>
</dependency>
<!-- Feature generation-->
<dependency>
<groupId>io.helidon.common.features</groupId>
<artifactId>helidon-common-features-api</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-testCompile</id>
<configuration>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${version.lib.hibernate}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
<compilerArgs combine.children="append">
<arg>-Xlint:-processing</arg>
</compilerArgs>
</configuration>
</execution>
</executions>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.helidon.codegen</groupId>
<artifactId>helidon-codegen-apt</artifactId>
<version>${helidon.version}</version>
</path>
<path>
<groupId>io.helidon.common.features</groupId>
<artifactId>helidon-common-features-codegen</artifactId>
<version>${helidon.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs combine.children="append">
<arg>-Xlint:-path</arg>
</compilerArgs>
</configuration>
<dependencies>
<dependency>
<groupId>io.helidon.codegen</groupId>
<artifactId>helidon-codegen-apt</artifactId>
<version>${helidon.version}</version>
</dependency>
<dependency>
<groupId>io.helidon.common.features</groupId>
<artifactId>helidon-common-features-codegen</artifactId>
<version>${helidon.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<executions>
<execution>
<id>Generate persistence.xml Java objects</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/generated-sources/xjc</outputDirectory>
<addGeneratedAnnotation>true</addGeneratedAnnotation>
<xjbSources>
<xjbSource>src/main/xjb</xjbSource>
</xjbSources>
<sources>
<source>src/main/xsd</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>io.smallrye</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<executions>
<execution>
<id>make-index</id>
<goals>
<goal>jandex</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<classpathDependencyExcludes>
<!-- Exclude Hibernate and its transitive dependencies when Eclipselink is being tested. -->
<classpathDependencyExclude>com.fasterxml:classmate</classpathDependencyExclude>
<classpathDependencyExclude>io.helidon.integrations.cdi:helidon-integrations-cdi-hibernate</classpathDependencyExclude>
<classpathDependencyExclude>net.bytebuddy:byte-buddy</classpathDependencyExclude>
<classpathDependencyExclude>org.antlr:antlr4-runtime</classpathDependencyExclude>
<classpathDependencyExclude>org.hibernate.common:hibernate-commons-annotations</classpathDependencyExclude>
<classpathDependencyExclude>org.hibernate.orm:hibernate-core</classpathDependencyExclude>
</classpathDependencyExcludes>
<reportNameSuffix>eclipselink</reportNameSuffix>
<skip>${eclipselink.skip}</skip>
<systemPropertyVariables>
<helidon.jta.immediateEnlistment>${helidon.jta.immediateEnlistment}</helidon.jta.immediateEnlistment>
<helidon.jta.interposedSynchronizations>${helidon.jta.interposedSynchronizations}</helidon.jta.interposedSynchronizations>
<helidon.jta.preemptiveEnlistmentChecks>${helidon.jta.preemptiveEnlistmentChecks}</helidon.jta.preemptiveEnlistmentChecks>
<java.util.logging.config.file>${project.basedir}/src/test/logging.properties</java.util.logging.config.file>
</systemPropertyVariables>
<testClassesDirectory>${project.build.directory}/eclipselink/test-classes</testClassesDirectory>
</configuration>
<executions>
<execution>
<id>hibernate</id>
<goals>
<goal>test</goal>
</goals>
<configuration>
<classpathDependencyExcludes>
<!-- Exclude Eclipselink and its transitive dependencies when Hibernate is being tested. -->
<classpathDependencyExclude>io.helidon.integrations.cdi:helidon-integrations-cdi-eclipselink</classpathDependencyExclude>
<classpathDependencyExclude>org.eclipse.persistence:org.eclipse.persistence.asm</classpathDependencyExclude>
<classpathDependencyExclude>org.eclipse.persistence:org.eclipse.persistence.core</classpathDependencyExclude>
<classpathDependencyExclude>org.eclipse.persistence:org.eclipse.persistence.jpa</classpathDependencyExclude>
<classpathDependencyExclude>org.eclipse.persistence:org.eclipse.persistence.jpa.jpql</classpathDependencyExclude>
</classpathDependencyExcludes>
<reportNameSuffix>hibernate</reportNameSuffix>
<skip>${hibernate.skip}</skip>
<testClassesDirectory>${project.build.directory}/hibernate/test-classes</testClassesDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>static-jpa</id>
<activation>
<activeByDefault>false</activeByDefault>
<property>
<name>maven.test.skip</name>
<value>!true</value>
</property>
</activation>
<build>
<plugins>
<!--
Please note that the ordering of the following
plugins below is significant:
* maven-resources-plugin
* exec-maven-plugin
* hibernate-enhance-maven-plugin
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>Copy test classes to Eclipselink weaving area</id>
<goals>
<goal>copy-resources</goal>
</goals>
<phase>process-test-classes</phase>
<configuration>
<resources>
<resource>
<directory>${project.build.testOutputDirectory}</directory>
<filtering>false</filtering>
</resource>
</resources>
<outputDirectory>${project.build.directory}/eclipselink/test-classes</outputDirectory>
<overwrite>true</overwrite>
</configuration>
</execution>
<execution>
<id>Copy test classes to Hibernate weaving area</id>
<goals>
<goal>copy-resources</goal>
</goals>
<phase>process-test-classes</phase>
<configuration>
<resources>
<resource>
<directory>${project.build.testOutputDirectory}</directory>
<filtering>false</filtering>
</resource>
</resources>
<outputDirectory>${project.build.directory}/hibernate/test-classes</outputDirectory>
<overwrite>true</overwrite>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>weave</id>
<phase>process-test-classes</phase>
<goals>
<goal>java</goal>
</goals>
<configuration combine.self="override">
<classpathScope>test</classpathScope>
<mainClass>org.eclipse.persistence.tools.weaving.jpa.StaticWeave</mainClass>
<arguments>
<argument>-loglevel</argument>
<argument>INFO</argument>
<argument>-persistenceinfo</argument>
<argument>${project.build.directory}/eclipselink/test-classes</argument>
<argument>${project.build.directory}/eclipselink/test-classes</argument>
<argument>${project.build.directory}/eclipselink/test-classes</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<executions>
<execution>
<id>Statically enhance JPA entities for Hibernate</id>
<phase>process-test-classes</phase>
<goals>
<goal>enhance</goal>
</goals>
<configuration>
<base>${project.build.directory}/hibernate/test-classes</base>
<dir>${project.build.directory}/hibernate/test-classes</dir>
<failOnError>true</failOnError>
<enableAssociationManagement>true</enableAssociationManagement>
<enableDirtyTracking>true</enableDirtyTracking>
<enableExtendedEnhancement>true</enableExtendedEnhancement>
<enableLazyInitialization>true</enableLazyInitialization>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>sources</id>
<build>
<plugins>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>resource-bundle</id>
<goals>
<goal>resource-bundle</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>