gradle-aspectj: опции компиляции Weaving & ajc, работающие при компиляции, но не в тестовом задании

Я успешно настроил ткачество в Eclipse через плагин AJDT и в моей сборке gradle через плагин gradle-aspectj (что заняло довольно много времени...).

В Eclipse это работает как для производственного, так и для тестового кода, т.е. все тесты проходят. Когда я запускаю сборку Gradle, результирующее приложение также работает нормально, и я вижу, что аспекты работают так, как ожидалось.

Задача gradle "test", однако, не выполняется, так как многие тесты не выполняются. Я могу отследить большинство сбоев, вернувшись к некоторому аспекту (здесь: для пружинных транзакций), который не работает, или к какой-то опции ajc-compiler для кодирования, которая не активна (подробности см. Здесь). Те же тесты работают нормально при запуске из Eclipse.

Требуется ли дополнительная настройка для того, чтобы ткачество работало и на тестах?

Я нашел некоторый связанный вопрос, однако это не решило проблему для меня. Похоже, что ни один аспект не выбран, ни параметры компилятора не активны (я вижу ошибки кодирования только в тестах).

Мой (сокращенно) build.gradle (Примечание: мне было трудно заставить ткачество работать вообще, так что это, вероятно, содержит некоторые ненужные настройки):

buildscript
{
  dependencies
  {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.6.RELEASE")
    classpath("nl.eveoh:gradle-aspectj:1.6")
  }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'
apply plugin: 'aspectj'

configurations {
  runtime
  testCompile {
    extendsFrom testAspectpath
  }
  aspectpath
  testAspectpath
  ajInpath
  compile {
    extendsFrom aspectpath
  }
}

dependencies
{
  // Non aspect dependencies
  // ...

  // Dependencies that require weaving - works for compile but not for test task
  aspectpath("org.springframework:spring-context:4.2.1.RELEASE")
  compile("org.springframework:spring-context:4.2.1.RELEASE")
  aspectpath("org.springframework:spring-context-support:4.2.1.RELEASE")
  compile("org.springframework:spring-context-support:4.2.1.RELEASE")
  compile 'com.vaadin:vaadin-spring-boot-starter:1.0.0'
  testCompile("org.springframework.boot:spring-boot-starter-test:${springVersion}")

  // Spring Data Neo4j
  compile "org.springframework.data:spring-data-neo4j:${springDataGraphVersion}"

  // Additional aspects - also need to be configured in ADJT
  aspectpath "org.aspectj:aspectjtools:${aspectjVersion}"
  compile "org.aspectj:aspectjrt:${aspectjVersion}"
  testCompile "org.aspectj:aspectjrt:${aspectjVersion}"
  compile "org.springframework:spring-aspects:4.2.1.RELEASE"
  aspectpath "org.springframework:spring-aspects:4.2.1.RELEASE"
  compile "org.springframework:spring-instrument:3.2.1.RELEASE"
  aspectpath "org.springframework:spring-instrument:3.2.1.RELEASE"
  compile "org.springframework.data:spring-data-neo4j-aspects:${springDataGraphVersion}"
  aspectpath "org.springframework.data:spring-data-neo4j-aspects:${springDataGraphVersion}"
  // Required by spring aspects
  compile "org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final"
  aspectpath "org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final"
  compile "javax.persistence:persistence-api:1.0"
  aspectpath "javax.persistence:persistence-api:1.0"
  testAspectpath sourceSets.main.output // from related question [4]
}

compileAspect {
  // Works in compile but not in test task!
  additionalAjcArgs = ['encoding' : 'UTF-8']
}

Редактировать: проблема с кодировкой была решена с помощью фрагмента кода от kriegaex. Проблема аспектов, которых нет в тестах при запуске из Gradle, все еще остается. Большинство тестов не удается из-за

org.neo4j.graphdb.NotInTransactionException

который указывает, что метод основан на аннотации

@Transactional

не эффективно. Какие-нибудь мысли?

1 ответ

Я не пробовал, но в соответствии с описанием плагина, я думаю, вы должны добавить это в ваш файл конфигурации Gradle:

compileTestAspect {
  additionalAjcArgs = ['encoding' : 'UTF-8']
}
Другие вопросы по тегам