Причал-maven-плагин и loadTimeWeaver
не может показаться, что мой веб-приложение spring работает с подключением причала-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 agent: -javaagent:org.springframework.instrument.jar
хотя у меня есть:
- установите MAVEN_OPTS в javaagent:/Users/blabla/.m2/repository/org/springframework/ spring -инструмент/3.1.3.RELEASE/spring -инструмент-3.1.3.RELEASE.jar
- установить JAVA_OPTIONS на одно и то же.
- добавил dep в spring -инструмент и spring -аспекты
- добавлен
jvmArgs
с -javaagent:....
в конфигурацию плацдарма-шлюза
Ответы
Ответ 1
Вероятно, вам не хватает нескольких банок aspectjweaver
aspectjrt
spring-instrument
Кроме того, вы можете попробовать явно указать bean loadTimeWeaver
в файле applicationcontext.xml.
<property name="loadTimeWeaver">
<bean id="instrumentationLoadTimeWeaver" class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
Ответ 2
При запуске Jetty из Maven (используя mvn jetty: run) Jetty будет работать в той же JVM, что и maven, поэтому вам нужно передать любые параметры с помощью MAVEN_OPTS.
(Обязательно включите знак минуса перед javaagent, поскольку я не видел этого в вашем фрагменте).
export 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
Ответ 3
Без подробностей о файле pom.xml... это нелегко. Но одна из распространенных проблем с плагином причала - это зависимости.
Одно правило, которое всегда срабатывало для меня, - это привязать все зависимости вашей войны к сфере, предоставляемой в качестве прямых зависимостей плагина maven-jetty.
Я предлагаю вам добавить spring -инструмент и spring -представляет в качестве прямых зависимостей плагина maven-jetty.
По моему мнению:
установите MAVEN_OPTS в javaagent:/Users/blabla/.m2/repository/org/springframework/ spring -инструмент/3.1.3.RELEASE/spring -инструмент-3.1.3.RELEASE.jar
- это правильный способ передать jvm args на пристань JVM (так как причал запускается в том же JVM как maven)
Ответ 4
У меня была такая же проблема Я использую разметку времени загрузки в spring. Как установить загрузчик классов в причал?. Я решил это, добавив "-Xbootclasspath/a: [путь в 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>
Ответ 5
Я, наконец, сделал это после примера из 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 или запустите виртуальную машину Java с помощью агента Spring: -javaagent: org.springframework.instrument.jar
ПРИМЕЧАНИЕ. Вы можете использовать версию Spring, которую вы хотите. Я использую 3.2.5 для всего.