使用IntelliJ IDEA运行配置无法获得ActiveJDBC动态检测

时间:2018-07-17 06:58:05

标签: java intellij-idea activejdbc

我试图在Intellij IDEA(2018.1 Ultimate)的JUnit测试的运行配置中将ActiveJDBC的动态工具与-javaagent命令行选项一起使用。我在运行配置对话框的“ VM Options”输入字段中输入了以下内容:

-javaagent:"C:\Users\cschabli\.m2\repository\org\javalite\activejdbc-instrumentation\2.0\activejdbc-instrumentation-2.0.jar" -Dactivejdbc-instrumentation.log=true

开始单元测试后,我得到了ActiveJDBC工具代理的日志消息,如下所示:

ActiveJDBC Instrumentation - You are using dynamic instrumentation
ActiveJDBC Instrumentation - Found model: foo.bar.MyModel

但是当应用程序代码访问模型类时,我收到以下错误消息:

org.javalite.activejdbc.InitException: failed to determine Model class name, are you sure models have been instrumented?

为什么这在IDEA中不起作用?

3 个答案:

答案 0 :(得分:0)

我使用了您在项目ActiveWeb - Simple上的配置:

几乎使用您的配置。所有工作均按预期进行,请参见屏幕截图。

但是,Dynamic Instrumentation在Java8 Lambdas中有其局限性。

如果测试令人烦恼并且出现某种方式,您可以在Intellij Idea中将像这样的简单脚本配置为“外部工具”:

#!/usr/bin/env bash

## This script will instrument fast without Maven
## Adjust versions on the classpath if upgrading!
export JAVALITE=2.0

export CLASSPATH=~/.m2/repository/org/javalite/activejdbc-instrumentation/$JAVALITE/activejdbc-instrumentation-$JAVALITE.jar
export CLASSPATH=${CLASSPATH}:~/.m2/repository/org/javassist/javassist/3.18.2-GA/javassist-3.18.2-GA.jar
export CLASSPATH=${CLASSPATH}:~/.m2/repository/org/javalite/activejdbc/$JAVALITE/activejdbc-$JAVALITE.jar
export CLASSPATH=${CLASSPATH}:target/classes

java   -classpath $CLASSPATH  -DoutputDirectory=target/classes 
org.javalite.instrumentation.Main

这是我个人使用的。该脚本避免了Maven的启动延迟,并且可以在少于100个表的项目中执行不到一秒钟的时间!

我将其配置为默认在任何JUnit测试之前启动。

答案 1 :(得分:0)

从Jetbrains反馈:

对于Gradle项目,您可以告诉IDEA将IDE生成/运行操作委派给Gradle(请参阅选项首选项|生成,执行,部署|生成工具| Gradle | Runner |委托IDE生成/运行操作以进行gradle)。

对于Maven项目,目前尚无解决方案。他们已经提出了问题IDEA-195924

答案 2 :(得分:0)

我为Gradle IntelliJ找到了解决此问题的方法。

代替从顶部的绿色箭头运行,请转到 Gradle (in the right of screen) --> Tasks --> Application --> run

这应该可以正常运行,因为在此运行期间仪器会正确运行。