Как установить.classpath в STS (eclipse) по gradle для AspectJ и Spring-аспекты

У меня есть проект, использующий ткачество времени компиляции для @Configurable из Spring-аспектов в мои классы с использованием @Configurable. Я использую Spring Tool Suite 3.7.0 и запускаю все, если использую задачи gradle для сборки и запуска своего приложения. (Благодаря плагину: https://github.com/eveoh/gradle-aspectj).

Теперь я хочу использовать также природу AspectJ Eclipse. Вручную я запустил это, превратив проект в AspectJ И добавив spring-aspect.jar как AspectJ inpath. Я хочу сделать это и с помощью gradle. Превратить проект в характер AspectJ стало возможным благодаря:

eclipse {
    project {
        buildCommand('org.eclipse.ajdt.core.ajbuilder')
        natures += 'org.eclipse.ajdt.ui.ajnature'
}

Как настроить gradle, чтобы он также делал шаг "добавь spring-aspect.jar как мой путь"?

Когда я сравниваю файл.classpath, разница заключается в следующем:

<classpathentry exported="true" kind="con" path="org.eclipse.jst.j2ee.internal.web.container">
    <attributes>
        <attribute name="org.eclipse.ajdt.inpath.restriction" value="spring-aspects-4.1.7.RELEASE.jar"/>
        <attribute name="org.eclipse.ajdt.inpath" value="org.eclipse.ajdt.inpath"/>
    </attributes>
</classpathentry>

<classpathentry kind="con" path="org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"/>

(classpathentry org.eclipse.jst.j2ee.internal.web.container уже был там, но атрибуты отсутствуют)

Итак, как я могу добавить этот фрагмент в путь к классам? Я видел примеры, которые изменяют classpath, как это:

eclipseClasspath {
    withXml { xmlProvider ->
      def classpath = xmlProvider.asNode()
      def parser = new XmlParser() 

... но я всегда получаю ошибку здесь:could not find method whenConfigured() for arguments [build_52wic5gr82z6rcs33lo3ix1lk$_run_closure7_closure12_closure13@73914b82] on org.gradle.plugins.ide.eclipse.model.EclipseClasspath_Decorated@6ca18169.Как исправить эту ошибку? Это правильный способ настроить AspectJ inpath для ручной адаптации.classpath вручную?

1 ответ

Решение

Наконец я нашел решение, может быть, полезно для других. Чтобы создать именованный фрагмент.classpath, просто добавьте следующее в build.gradle

eclipse {
  classpath {
    file {
        withXml {

            def xmlparser = new XmlParser()

            def node = it.asNode()             
            node.findAll{it['@path'] == 'org.eclipse.jst.j2ee.internal.web.container'}.each {
                println it;
                def attributes = xmlparser.createNode(it, 'attributes', [:])
                xmlparser.createNode(attributes, 'attribute', [name: 'org.eclipse.ajdt.inpath.restriction', value: 'spring-aspects-4.1.7.RELEASE.jar']);
                xmlparser.createNode(attributes, 'attribute', [name: 'org.eclipse.ajdt.inpath', value: 'org.eclipse.ajdt.inpath']);
...
Другие вопросы по тегам