【问题标题】:How to enable Hibernate bytecode instrumentation just before Intellij IDEA run?如何在 Intellij IDEA 运行之前启用 Hibernate 字节码检测?
【发布时间】:2015-04-22 00:21:48
【问题描述】:

在 gradle 中你可以使用:

apply plugin: 'enhance'
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.hibernate:hibernate-gradle-plugin:VERSION'
    }
}
dependencies {
    compile group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-[SPEC-VERSION]-api', version: '[IMPL-VERSION]'
    compile group: 'org.hibernate', name: 'hibernate-gradle-plugin', version: 'VERSION'
}

如果我不想通过 Gradle 运行项目,而是想直接通过 Intellij (shift-F10) 运行我的主类,该怎么办。是否也可以在应用程序运行之前执行构建时字节码检测?我应该如何做到这一点?

【问题讨论】:

  • 我似乎根本无法设置插件......所以如果你想帮忙,请查看我的问题:stackoverflow.com/questions/35552109/…
  • 不是 Gradle 专家,但在 Maven 中,您可以通过在 Before launch 部分下添加 Run Maven Goal 任务来实现这一点(朝向底部运行配置窗口);同样,我想如果您的增强插件绑定到某个任务,您可以使用 Run Gradle task 选项将其添加为预启动操作

标签: java hibernate intellij-idea


【解决方案1】:

Hibernate 在运行时执行“字节码检测”,因此您无需执行任何特殊操作即可。

实际上它不是字节码检测,这意味着改变现有的类,而是代理,这意味着现有的类被动态生成的类使用。

【讨论】:

  • 抱歉造成混淆,我的意思是文档本节中描述的构建时字节码增强:docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/…
  • 有趣,不知道这是可能的。但是您也不会将它与您的 gradle 文件一起使用...
  • 文档中提到的 gradle 插件将在构建时增强实体类。基本上问题是我想在 Intellij 运行之前实现同样的事情(只是为了好玩:))
  • 该死,完全错过了那个小插件。这里不是 intellij 专家,但是如果您基于 gradle 插件导入项目,它实际上应该使用 gradle 来构建所有内容,所以这可能只是您想要的。
  • “字节码检测”和“运行时通过反射创建代理”是两个完全不同的东西,人们应该调查资源以了解差异。字节码增强提供了许多性能增强功能(有些人会说强制性能功能)。代理实际上只提供关系的延迟加载,并且它通过许多警告来解释 Hibernate 文档中的大型“警告”部分。自 2006 年以来,像 DataNucleus 这样的 JDO/JPA 实现已经受益于字节码增强,但它在 Hibernate 圈子中的使用较少。
猜你喜欢
  • 2012-12-10
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多