Подтвердить что ты не робот

Причал-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:.... в конфигурацию плацдарма-шлюза
4b9b3361

Ответ 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 для всего.