Как использовать сгенерированный код модели EMF в другом подпроекте Gradle? - PullRequest
1 голос
/ 18 февраля 2020

Учитывая следующую структуру проекта:

parent/
    settings.gradle
    app/
        src/main/java/...
        build.gradle
    model/
        src-gen/main/java/...
            Example.java
            impl/
                ExampleImpl.java
        build.gradle

В model/build.gradle Я объявляю необходимые пакеты EMF как api зависимости, предполагая, что они будут доступны пользователю этого проекта:

dependencies {
    api 'org.eclipse.emf:common:2.3.0-v200706262000'
    api 'org.eclipse.emf:ecore:2.3.0-v200706262000'
    api 'org.eclipse.emf:ecore-xmi:2.2.3'
}

sourceSets { main { java {
    srcDirs 'src-gen'
} } }

В app/build.gradle я объявляю :model как зависимость:

plugins {
    id 'java'
    id 'application'
}
dependencies {
    implementation project(':model')
    ...

Однако, когда я запускаю gradle run, я получаю следующее исключение (наряду с ~ 100 связанными) :

> Task :model:compileJava FAILED
/.../parent/model/src-gen/main/java/org/example/parent/model/impl/ExampleImpl.java:10: error: cannot find symbol
import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
                                 ^
  symbol:   class MinimalEObjectImpl
  location: package org.eclipse.emf.ecore.impl

Почему это так и что я могу с этим сделать? Я хочу создать модель данных на основе EMF (:model) и использовать ее в другом подпроекте (:app). Я хочу избежать зависимостей от Eclipse.

...