persistence unit gets overwritten

461 Views Asked by At

I'm coding a standalone java application, build it from a Maven project and executed by calling the jar file.

In the application I have an entity manager using a persistence unit, defined in my persistence.xml to be standalone (transaction-type="RESOURCE_LOCAL")

The actual Entity annotated classes comes from another project and are hence added to the pom.xml file as a dependency.

The problem is that the persistence.xml of the project containing the entity classes overwrites the actual standalone application's persistence.xml in the target folder of the jar when it's build.

The Maven build process goes through successfully, but when running the jar I get an exception like:

Exception in thread "main" javax.persistence.PersistenceException: No persistence providers available for "PersistenceUnitXXX" after trying the following discovered implementations: org.eclipse.persistence.jpa.PersistenceProvider

Furthermore the persistence unit of the projects containing the Entity classes is meant for deployment on an application server, so I don't think it is possible to reuse that persistence.xml for the standalone application.

The pom looks like this:

<?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>

    <parent>
        <groupId>com.my</groupId>
        <artifactId>projects</artifactId>
        <version>1.0</version>
        <relativePath>../..</relativePath>
    </parent>

    <groupId>com.my.projects</groupId>
    <artifactId>mystandaloneapp</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.oracle.weblogic</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.3-0-0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.openejb</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0-5</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>javax.persistence</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20170516</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.16</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.my</groupId>
            <artifactId>my_entities</artifactId>
            <version>1.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.my.StandAloneApp</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>create-my-bundle</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>eksport-assembly.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

The file structure is

-projects       
    -mystandaloneapp    
     -src
      -main
        -java
          -com
            -my
              -db
                -EntityConsumer
        -resources
           -WEB-INF
             -persistence.xml
  -my_entities    
    -src
      -main
        -java
          -com
            -my
              -model
                -db
                  -MyEntity
        -resources
           -WEB-INF
             -persistence.xml
1

There are 1 best solutions below

0
On BEST ANSWER

Okay the problem is a duplicate of this one, which presents a workable solution:

Maven overwrite resource file in dependency