通过POM项目编译EJB模块时未生成实体元模型类

时间:2015-06-02 15:04:41

标签: java maven java-ee eclipselink

我有一个像这样的Maven项目结构:

mallet import-dir

我可以按照data1,data2,ejb-jsf-converters,web和last ear的顺序编译所有内容。之后我可以部署web1-ear和web2-ear,一切正常。但是必须按特定顺序编译所有内容很烦人。我希望能够编译main。

但我不能。

问题是我在data1中有很多实体。当然,这些实体有很多元模型类。为了生成它们,我在data1的pom.xml中有这两个片段:

main (POM project)
|-ejb (POM project)
| |-data1 (EJB module)
| |-data2 (EJB module)
| |-ejb-jsf-converters (Java application)
|-web (POM project)
| |-... (A bunch of Web applications)
|-ear (POM project)
  |-web1-ear (Java EE7 EAR project)
  |-web2-ear (Java EE7 EAR project)

当我编译main而不是data1时,无法找到所有突然的persistence.xml,也没有生成或找到元模型类。我可以改变

...
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.4.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.0.5</version>
    <scope>provided</scope>
</dependency>
...
<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <version>2.2.4</version>
    <executions>
        <execution>
            <id>process</id>
            <goals>
                <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <compilerArguments>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</compilerArguments>
                <processors>
                    <processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor>
                </processors>
            </configuration>
        </execution>
    </executions>
</plugin>
...

<compilerArguments>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</compilerArguments>

然后我可以编译主项目。但是当我这样做时,我不再能编译data1。然后是无法找到persistence.xml并生成元模型类的data1。能够编译main是很好的,但每次我只想编译data1时被迫编译main是一件痛苦的事。编译main比编译data1长10-15倍。

我知道我可以通过指定绝对路径而不是相对路径来使其工作,但许多不同的机器需要编译它。绝对路径在所有这些路径上都不一样。

我考虑过使用环境变量,但我不确定它在所有情况下都能很好地工作。例如,当项目由Jenkins奴隶编译时。

如何使这项工作成功,所以我可以按照我认为合适的方式编译main和data1?

1 个答案:

答案 0 :(得分:1)

我得到了它的工作。我将依赖项更改为

.row{
width: 220px;
height: 50px;
border: 1px solid black;
display: -webkit-flex;
display: flex;
float:right;

并删除

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.6.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
    <version>2.5.2</version>
    <scope>provided</scope>
</dependency>

完全。它在编译过程中抱怨很多关于缺少元模型类的问题,但它确实有效,所以很明显无论如何都会生成类。