Ошибка при обновлении версий XText для Gradle 6 - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь обновить проект 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 Ответ

0 голосов
/ 27 апреля 2020

Я получил помощь от людей, работающих над плагином XText Gradle, через https://github.com/xtext/xtext-gradle-plugin/issues/171.

Самая большая проблема заключается в том, что src-gen не может существовать в пути к классам до выполнения задачи generateXText. Чтобы помочь с этим обновлением, рекомендуется задача clean удалить папку src-gen. Кроме того, вторые 3 compile зависимости должны быть xtextLanguages зависимости.

...