Как установить .classpath в STS (eclipse) с помощью gradle для AspectJ и весенних аспектов

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

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

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

Как настроить gradle, чтобы он также выполнял шаг «добавить spring-sizes.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 уже был там, но атрибуты отсутствуют)

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

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. Как исправить эту ошибку? Это правильный способ настроить inpath AspectJ для ручной адаптации .classpath?


person timguy    schedule 27.07.2015    source источник
comment
Это основной вопрос Gradle ... Попробуйте спросить у людей Gradle напрямую: обсудить.gradle.org   -  person aboyko    schedule 28.07.2015
comment
Спасибо @aboyko. К счастью, теперь проблема решена.   -  person timguy    schedule 30.07.2015


Ответы (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']);
...
person timguy    schedule 30.07.2015