码头 - Maven的插件和的LoadTimeWeaver(jetty-maven-plugin

2019-08-03 19:36发布

似乎无法让我的春天web应用与码头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 弹簧仪器弹簧方面
  • 加入jvmArgs-javaagent:....到码头-行家-插件配置

Answer 1:

也许你缺少几个罐子aspectjweaver aspectjrt spring-instrument

此外,你可能想尝试明确界定豆loadTimeWeaver在applicationContext.xml文件。

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


Answer 2:

当启动从Maven的码头(使用命令mvn码头:运行),码头将在同一个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



Answer 3:

没有你的pom.xml文件的详细信息......这并不容易。 但随着码头插件的一个共同问题是依赖关系。

总是为我工作的一个规则是把你的一切战争的依赖与作为Maven的码头 - 插件直接依赖关系提供范围。

我建议你把弹簧仪及弹簧方面的行家,码头,插件的直接依赖了。

根据我的理解:

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

是通过JVM参数传递给码头JVM(因为码头运行在相同的JVM行家)的正确方式



Answer 4:

我有同样的问题, 我使用的加载时间在春季织。 如何设置类加载器在码头? 。 我已经加入了解决它“-Xbootclasspath / A:[路径罐子]”作为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>


Answer 5:

我终于做到了以下工作从ddewaele的例子。 所以从这样做除了

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

你必须检查你已经添加的依赖关系。 我错过了春天-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的一切。



Answer 6:

想提醒大家好! 这个问题是非常不清楚。 不包括这依赖于你的项目或提供的范围包括。

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

否则(装载剂时,第二连接,同时第一库)代理类InstrumentationSavingAgent将加载两次,弹簧将使用第二类实例,而无需注入仪器



文章来源: jetty-maven-plugin and loadTimeWeaver