5

我一直在使用Avaje.org ebean ORM 层,但我不明白如何使用 Maven 启用“Ebean v2.6.0 用户指南”中描述的字节码增强功能。

我在 Avaje.org 主页上找到了一个配置示例,但它不起作用。GitHub 上的演示 Maven 样板也没有。

帮助!

4

3 回答 3

7

EBeans 现在有自己的 Maven 插件,但是我在网上找不到任何文档,所以这里是一个如何使用它的示例:

<plugin>
    <groupId>org.avaje.ebeanorm</groupId>
    <artifactId>avaje-ebeanorm-mavenenhancer</artifactId>
    <version>${ebean.version}</version>
    <executions>
        <execution>
            <id>main</id>
            <phase>process-classes</phase>
            <goals>
                <goal>enhance</goal>
            </goals>
            <configuration>
                <packages>com.package1.**,com.package2.**</packages>
                <transformArgs>debug=1</transformArgs>
                <classSource>${project.build.outputDirectory}</classSource>
                <classDestination>${project.build.outputDirectory}</classDestination>
            </configuration>
        </execution>
    </executions>
</plugin>

使用日食

如果您使用 Eclipse,您需要确保它在需要时运行插件,如下所示:

<build>
    <plugins>
        <!-- plugins here -->
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.avaje.ebeanorm</groupId>
                                    <artifactId>avaje-ebeanorm-mavenenhancer</artifactId>
                                    <versionRange>[3.3.2,)</versionRange>
                                    <goals>
                                        <goal>enhance</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <execute>
                                        <runOnConfiguration>true</runOnConfiguration>
                                        <runOnIncremental>true</runOnIncremental>
                                    </execute>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
于 2013-04-02T20:26:34.767 回答
2

过时的答案

此答案适用于非常旧版本的 EBeans,请忽略它。

原创内容

Avaje 页面上的示例有一些错误。

  1. 标签不正确:“process-ebean-enhancement”不是 Maven 生命周期,因此示例配置中的插件将无法正确运行。正确的阶段是“进程类”。
  2. “classSource”参数不正确。按照配置,ebean 插件将增强您的测试代码中的@Entity 类,而不是您的生产代码。正确的值是“${project.build.outputDirectory}”。
  3. 确保更新项目的包空间。这是下面示例中的“com.mycompany.**”。

完整的配置应该是:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>process-ebean-enhancement</id>
                    <phase>process-classes</phase>
                    <configuration>
                        <tasks>
                            <property name="compile_classpath" refid="maven.compile.classpath" />
                            <echo
                                message="Ebean enhancing test classes debug level -----------------------------------" />
                            <echo message="Classpath: ${compile_classpath}" />
                            <taskdef name="ebeanEnhance" classname="com.avaje.ebean.enhance.ant.AntEnhanceTask"
                                classpath="${compile_classpath}" />
                            <ebeanEnhance classSource="${project.build.outputDirectory}"
                                packages="com.mycompany.**" transformArgs="debug=1" />
                        </tasks>
                        <encoding>UTF-8</encoding>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>  

这将增强“src/main/java/com/mycompany”及以下所有@Entity 类。

您可以通过对要检查的包进行更多限制来缩短执行时间。

此外,如果您确实需要增强测试类,则可能需要复制此配置。在这种情况下,对第二个块使用“proces-test-classes”阶段。

于 2012-08-16T22:46:08.240 回答
2

JBCP 的答案是针对旧的 ebean 版本 ( org.avaje.ebeanorm)。对于较新的版本( io.ebean),您需要更改为ebean-maven-plugin.

<plugin>
    <groupId>io.ebean</groupId>
    <artifactId>ebean-maven-plugin</artifactId>
    <version>${ebean.version}</version>
    <executions>
        <execution>
            <id>main</id>
            <phase>process-classes</phase>
            <goals>
                <goal>enhance</goal>
            </goals>
            <configuration>
                <packages>com.package1.**,com.package2.**</packages>
                <transformArgs>debug=1</transformArgs>
                <classSource>${project.build.outputDirectory}</classSource>
                <classDestination>${project.build.outputDirectory}</classDestination>
            </configuration>
        </execution>
    </executions>
</plugin>

注意: ebean 插件版本应与 ebean 版本相同。

参考: Maven 仓库Github

于 2018-02-03T02:43:49.463 回答