Ошибка при обновлении версий XText для Gradle 6
Я пытаюсь обновить проект EMF/XCore до более новых версий, чтобы обойти проблему с управлением версиями. В настоящее время репозиторий, в котором находится этот проект, должен быть нацелен на Gradle 4 и Bndtools 4.3 из-за проблем при нацеливании на более новые версии. Я с готовностью признаю, что проблема здесь в моем непонимании XText, XCore и других. Теперь я нахожусь на машине без доступа к Java 8, что вынудило меня попытаться обновить настройки проекта, если это вообще возможно.
Последними безопасными целями для этого проекта были XText 2.16.0
и версия org.xtext.builder 1.0.21
. Примеры, которые мне удалось найти, по большей части соответствуют настройкам этого проекта.
Итак, теперь мы пытаемся запустить Gradle 6.3
среда с OpenJDK 13
(если версия Java - проблема, которую можно изменить)...
Примечания
- Некоторые изменения основаны на поиске решений моей проблемы сборки, и добавлены некоторые комментарии.
${mavenURL}
в настоящее время указывает на Maven Central- Я добавил
compile platform()
Линия основана на примечаниях к выпуску XText. Хотя, похоже, это не помогает решить эту проблему. - Я изменил номера версий, чтобы они соответствовали тем, что были в спецификации Maven.
- Я пробовал различные комбинации изменения
org.xtext.builder
версия, а также нацелена на EMF 2.21 и 2.20 - Я пробовал более низкую версию XText.
2.17.0
терпит неудачу с другой проблемой
build.gradle
:
plugins {
id 'org.xtext.builder' version '2.0.8'
id 'java' // Helpful? Doesn't appear so
}
repositories {
maven() {
url "${mavenURL}"
}
}
ext.xtextVersion = "2.21.0"
ext.emfVersion = "2.20.0"
dependencies {
compile platform("org.eclipse.xtext:xtext-dev-bom:${xtextVersion}")
xtextLanguages 'org.eclipse.emf:org.eclipse.emf.codegen.ecore.xtext:1.4.0'
xtextLanguages('org.eclipse.emf:org.eclipse.emf.ecore.xcore:1.12.0') {
exclude group: 'org.antlr', module: 'antlr-runtime'
}
xtextLanguages "org.eclipse.xtext:org.eclipse.xtext.ecore:${xtextVersion}"
xtextLanguages "org.eclipse.xtext:org.eclipse.xtext.xbase.lib:${xtextVersion}"
xtextLanguages 'org.eclipse.emf:org.eclipse.emf.codegen:2.19.0'
xtextLanguages 'org.eclipse.emf:org.eclipse.emf.codegen.ecore:${emfVersion}'
xtextLanguages 'org.eclipse.emf:org.eclipse.emf.mwe2.runtime:2.11.2'
compile "org.eclipse.xtext:org.eclipse.xtext:${xtextVersion}"
compile "org.eclipse.xtext:org.eclipse.xtext.xbase:${xtextVersion}"
compile 'org.eclipse.emf:org.eclipse.emf.ecore.xcore.lib:1.4.0'
}
xtext {
version = "${xtextVersion}"
languages {
ecore {
setup = 'org.eclipse.xtext.ecore.EcoreSupport'
}
codegen {
setup = 'org.eclipse.emf.codegen.ecore.xtext.GenModelSupport'
}
xcore {
setup = 'org.eclipse.emf.ecore.xcore.XcoreStandaloneSetup'
generator.outlet.producesJava = true
// Have also tried generator.javaSourceLevel = '1.8'
}
}
sourceSets {
main {
srcDir 'model'
// Move the generated Xcore output to the src directory
output {
dir(xtext.languages.xcore.generator.outlet, 'src-gen')
}
}
}
}
Несколько попыток привели к следующей ошибке:
> ./gradlew jar
...
> Task :com.example.project:generateXtext FAILED
ERROR:A generic type in this context must refer to a classifier or a type parameter (file:...file.xcore)
...
> Xtext validation failed, see build log for details.
для множества строк. Файл XCore выглядит примерно так
@GenModel(
complianceLevel="8.0",
loadInitialization="false",
modelDirectory="com.example.project/src-gen",
bundleManifest="false",
updateClasspath="false",
oSGiCompatible="true",
forceOverwrite="true")
@Ecore(
nsPrefix="query",
nsURI="something"
)
// These lines had to be added to resolve the above annotations no longer working
annotation "http://www.eclipse.org/emf/2002/GenModel" as GenModel
annotation "http://www.eclipse.org/emf/2002/Ecore" as Ecore
interface Node wraps an.external.Node {}
abstract class ENode extends Node
{
op Object getParent() // This line fails due to not referring to object or classifier
{
eContainer
}
}
Я видел, как эта ошибка всплывала в отчетах об ошибках на сайтах XText (таких как https://github.com/eclipse/xtext-maven/issues/71), и они были устранены. Но обычно проекты ссылаются на примеры Github, такие как https://github.com/itemis/itemis-blog/tree/xcore_gradle или https://github.com/ghillairet/xcore-gradle-example, которые оба указывают на версии XText и соответствующий строитель, который действительно работал до этой попытки обновления.
Это проект XText. Соответствующая часть.project
файл здесь:
<buildSpec>
<buildCommand>
<name>bndtools.core.bndbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>bndtools.core.bndnature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
</natures>
Любая помощь будет оценена.
1 ответ
Мне помогли люди, работающие над подключаемым модулем XText Gradle через https://github.com/xtext/xtext-gradle-plugin/issues/171.
Самая большая проблема в том, что src-gen
не может существовать в пути к классам до выполнения generateXText
задача. Чтобы помочь с этим обновлениемclean
задача убрать src-gen
папка рекомендуется. Дополнительно второй 3compile
зависимости должны быть xtextLanguages
зависимости.