11

似乎无法让我的 spring webapp 与 jetty-maven 插件一起使用

我总是得到

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-instrumentspring-aspects
  • 添加jvmArgs-javaagent:....jetty-maven-plugin 配置
4

6 回答 6

1

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

(请务必在 javaagent 之前包含减号,因为我在您的代码段中没有看到它)。

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

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

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

于 2013-03-20T21:19:26.660 回答
1

可能你缺少几个罐子aspectjweaver aspectjrt spring-instrument

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

    <property name="loadTimeWeaver">
        <bean id="instrumentationLoadTimeWeaver" class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
    </property>
于 2012-12-11T07:54:36.420 回答
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 中运行)

于 2013-03-14T16:38:19.473 回答
0

我遇到了同样的问题,我在春天使用加载时间编织。如何在码头设置类加载器?. 我通过添加“-Xbootclasspath/a:[path to jar]”作为 JvmArgs 参数解决了这个问题。

现在看起来像

<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>
于 2014-05-30T04:17:09.260 回答
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。

于 2014-11-18T09:53:38.550 回答
0

想警告大家!这个问题非常不清楚。不要将此依赖项包含到您的项目中或包含在提供的范围内。

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

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

于 2018-07-18T12:35:06.420 回答