似乎无法使用我的弹簧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
虽然我有:
jvmArgs
与-javaagent:....
添加到jetty-maven-plugin配置答案 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的例子开始工作了。所以除了做
您必须检查已添加的依赖项。我错过了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