jetty-maven-plugin和loadTimeWeaver

时间:2012-12-10 10:47:03

标签: spring maven jetty eclipselink load-time-weaving

似乎无法使用我的弹簧webapp使用jetty-maven pluging

我总是得到

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [org.eclipse.jetty.webapp.WebAppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar

虽然我有:

  • 将MAVEN_OPTS设置为javaagent:/Users/blabla/.m2/repository/org/springframework/spring-instrument/3.1.3.RELEASE/spring-instrument-3.1.3.RELEASE.jar
  • 将JAVA_OPTIONS设置为相同的内容
  • 将dep添加到 spring-instrument spring-aspects
  • jvmArgs-javaagent:....添加到jetty-maven-plugin配置

6 个答案:

答案 0 :(得分:1)

可能你错过了几个罐aspectjweaver aspectjrt spring-instrument

此外,您可能希望尝试在applicationcontext.xml文件中显式定义bean loadTimeWeaver

    <property name="loadTimeWeaver">
        <bean id="instrumentationLoadTimeWeaver" class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
    </property>

答案 1 :(得分:1)

从Maven启动Jetty时(使用mvn jetty:run),Jetty将与maven在同一个JVM中运行,因此您需要使用MAVEN_OPTS传递任何选项。

(请务必在javaagent之前加上减号,因为我在您的代码段中没有看到这一点。)

导出MAVEN_OPTS = -javaagent:org.springframework.instrument-3.0.5.RELEASE.jar

使用Maven在码头编织加载时间的完整示例可以在Github上找到。

https://github.com/zzantozz/testbed/tree/master/spring-aspectj-load-time-weaving-in-jetty

答案 2 :(得分:0)

没有关于你的pom.xml文件的更多细节......这并不容易。但是jetty插件的一个常见问题是依赖性。

对我来说一直有效的一条规则就是将战争的所有依赖关系作为maven-jetty-plugin的直接依赖项提供。

我建议你把spring-instrument和spring-aspects作为maven-jetty-plugin的直接依赖。

根据我的理解:

  

将MAVEN_OPTS设置为javaagent:/Users/blabla/.m2/repository/org/springframework/spring-instrument/3.1.3.RELEASE/spring-instrument-3.1.3.RELEASE.jar

是将jvm args传递给jetty JVM的正确方法(因为jetty在与maven相同的JVM中运行)

答案 3 :(得分:0)

我有同样的问题I use load time weaving in spring. How can i set class loader in jetty?。我通过添加&#34; -Xbootclasspath / a:[jar的路径]&#34;来解决它。作为JvmArgs param。

现在它看起来像

<extraJvmArgs>-Xmx4g -XX:MaxPermSize=512m -javaagent:C:\Users\auldanov\.m2\repository\org\springframework\spring-instrument\3.1.4.RELEASE\spring-instrument-3.1.4.RELEASE.jar -Xbootclasspath/a:C:\Users\auldanov\.m2\repository\org\springframework\spring-instrument\3.1.4.RELEASE\spring-instrument-3.1.4.RELEASE.jar</extraJvmArgs>

答案 4 :(得分:0)

我终于按照ddewaele的例子开始工作了。所以除了做

  • 将MAVEN_OPTS设置为 javaagent:/Users/blabla/.m2/repository/org/springframework/spring-instrument/3.1.3.RELEASE/spring-instrument-3.1.3.RELEASE.jar

您必须检查已添加的依赖项。我错过了spring-tx。您需要拥有这些依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.6.10</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>
<!-- Following dependencies are required because of spring-aspects -->
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>

否则会出现非直观错误

  

指定自定义LoadTimeWeaver或使用Spring的代理启动Java虚拟机:-javaagent:org.springframework.instrument.jar

注意:您可以使用所需的弹簧版本。我正在使用3.2.5。

答案 5 :(得分:0)

要警告大家!这个问题还不清楚。 不要将此依赖项包括在您的项目中,也不要包括在提供的范围内。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-instrument</artifactId>
    <version>${thirdparty.spring.version}</version>
</dependency>

否则,代理类InstrumentationSavingAgent将加载两次(第一次加载代理时,第二次在链接库时),并且spring将使用第二个Class实例而不注入Instrumentation