Как установить.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']);
...