yang-maven-plugin broken in-IDE (Eclipse) with M2E, let's focus on yangide, and remove lifecycle-mapping <execute/>, OK for everyone?


Michael Vorburger
 

Hello (please cross-post replies to other lists if appropriate),

I'm finding that when importing e.g. openflowplugin in the (Eclipse) IDE, using https://github.com/vorburger/opendaylight-eclipse-setup, then the error copy/pasted below frequently appears in the Error Log (in Eclipse), and leaves ugly red marks on the pom.xml. (In addition to just being "ugly", any kind of error always make it hard to see real errors.)

This is because M2E, the Eclipse plugin for Maven, is trying to run the yang-maven-plugin in-IDE - because we (someone) told it to do so via an an M2E lifecycle-mapping <execute/> in a pom.xml .. But this integration appears to be broken, I'm not sure if it ever properly worked in the past, does anyone know?

I therefore would like to suggest, as it's broken anyway, to remove the M2E lifecycle-mapping, as suggested in https://git.opendaylight.org/gerrit/39043. In https://github.com/vorburger/opendaylight-eclipse-setup, the workspace wide lifecycle mapping for yang-maven-plugin is ignore.

In the future, I'm hoping that I'll be able to bundle yangide in opendaylight-eclipse-setup, and it will correctly configure code generation, because it has an M2E extension which does the right thing (hopefully; more soon).

Unless anyone shouts that I'm totally not getting how everyone works, I will propose removing the M2E lifecycle-mapping for yang-maven-plugin from pom.xml of other projects as well in the future.

On an unrelated note, please also note https://git.opendaylight.org/gerrit/39041 .. I'm not sure how this could ever have worked before.

Regards,
Michael

yang-to-sources: Unable to parse yang files from /home/vorburger/dev/ODL/git/openflowplugin/applications/forwardingrules-manager/src/main/yang (org.opendaylight.yangtools:yang-maven-plugin:1.0.0-SNAPSHOT:generate-sources:default:generate-sources)

org.apache.maven.plugin.MojoExecutionException: yang-to-sources: Unable to parse yang files from /home/vorburger/dev/ODL/git/openflowplugin/applications/forwardingrules-manager/src/main/yang
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:200)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.execute(YangToSourcesProcessor.java:93)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute(YangToSourcesMojo.java:116)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331)
at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1362)
at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1360)
at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:172)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:115)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:105)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86)
at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Imported module [config] was not found. [at null:6:1]
at org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException.throwIf(InferenceException.java:47)
at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ImportStatementDefinition$1.prerequisiteFailed(ImportStatementDefinition.java:103)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl.failModifier(ModifierImpl.java:91)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:292)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.addSourceExceptions(BuildGlobalContext.java:215)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.completePhaseActions(BuildGlobalContext.java:284)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.buildEffective(BuildGlobalContext.java:176)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:105)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:123)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:169)
... 34 more


Tx,
M.
--
Michael Vorburger <vorburger@...> | IRC: vorburger @freenode | G/Hangout: michael.vorburger | Skype: mike_vorburger | ~ = http://vorburger.ch


Michael Vorburger
 

Hello,

I've now better & fully understood the root cause of the error message shown below (org.apache.maven.plugin.MojoExecutionException: yang-to-sources: Unable to parse yang files from .../src/main/yang Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Imported module [...] was not found. [at META-INF/yang/....yang:15:4]):

This happens both when using yangide, but even without yangide at all but when attempting to configure M2E lifecycle-mapping <execute/>for yang-maven-plugin <action><execute/> (which I do not recommend, but some projects still have this; BTW will anyone ever merge https://git.opendaylight.org/gerrit/#/c/39043/ and https://git.opendaylight.org/gerrit/#/c/39041/ ?) ..

.. AND when one open project a in the workspace refers to a YANG model from another project B in the workspace ("in-workspace cross-project *.yang references"), AND when that project B does NOT (yet) have src/main/yang listed as a source folder. In that case, yangide respectively yangtools' yang-maven-plugin called by M2E, cannot find the referenced YANG model in B, as it's not on the classpath as a dependency. (BTW: It does work, always, when project B is closed, because then A has a dependency to a /META-INF/yang/*.yang in a .m2/repository/**/*.jar; and that's fine.)

What can be slightly confusing is that it only happens during initial setup. If you have yangide (does anyone? you soon will, through https://github.com/vorburger/opendaylight-eclipse-setup ...), then if angrily does an Update Maven Configuration on B, if you know the correct dependency tree, then src/main/yang at some point gets automatically added as a source folder, by org.opendaylight.yangide.m2e.yang's YangProjectConfigurator. Once that's set, then this problem doesn't occur anymore, and is difficult to reproduce (unless you manually re-remove the src/main/yang from Project B). But of course, this should just work nicely out of the box.

The solution, I think, is to do https://git.opendaylight.org/gerrit/#/c/39275/ in mdsal, and https://git.opendaylight.org/gerrit/#/c/39277/ in controller. 

FYA: Will you merge all Gerrits mentioned in this email thread, to fix this problem?

Tx,
M.
--
Michael Vorburger <vorburger@...> | IRC: vorburger @freenode | G/Hangout: michael.vorburger | Skype: mike_vorburger | ~ = http://vorburger.ch


On Wed, May 18, 2016 at 3:05 PM, Michael Vorburger <vorburger@...> wrote:
Hello (please cross-post replies to other lists if appropriate),

I'm finding that when importing e.g. openflowplugin in the (Eclipse) IDE, using https://github.com/vorburger/opendaylight-eclipse-setup, then the error copy/pasted below frequently appears in the Error Log (in Eclipse), and leaves ugly red marks on the pom.xml. (In addition to just being "ugly", any kind of error always make it hard to see real errors.)

This is because M2E, the Eclipse plugin for Maven, is trying to run the yang-maven-plugin in-IDE - because we (someone) told it to do so via an an M2E lifecycle-mapping <execute/> in a pom.xml .. But this integration appears to be broken, I'm not sure if it ever properly worked in the past, does anyone know?

I therefore would like to suggest, as it's broken anyway, to remove the M2E lifecycle-mapping, as suggested in https://git.opendaylight.org/gerrit/39043. In https://github.com/vorburger/opendaylight-eclipse-setup, the workspace wide lifecycle mapping for yang-maven-plugin is ignore.

In the future, I'm hoping that I'll be able to bundle yangide in opendaylight-eclipse-setup, and it will correctly configure code generation, because it has an M2E extension which does the right thing (hopefully; more soon).

Unless anyone shouts that I'm totally not getting how everyone works, I will propose removing the M2E lifecycle-mapping for yang-maven-plugin from pom.xml of other projects as well in the future.

On an unrelated note, please also note https://git.opendaylight.org/gerrit/39041 .. I'm not sure how this could ever have worked before.

Regards,
Michael

yang-to-sources: Unable to parse yang files from /home/vorburger/dev/ODL/git/openflowplugin/applications/forwardingrules-manager/src/main/yang (org.opendaylight.yangtools:yang-maven-plugin:1.0.0-SNAPSHOT:generate-sources:default:generate-sources)

org.apache.maven.plugin.MojoExecutionException: yang-to-sources: Unable to parse yang files from /home/vorburger/dev/ODL/git/openflowplugin/applications/forwardingrules-manager/src/main/yang
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:200)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.execute(YangToSourcesProcessor.java:93)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute(YangToSourcesMojo.java:116)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331)
at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1362)
at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1360)
at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:172)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:115)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:105)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86)
at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Imported module [config] was not found. [at null:6:1]
at org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException.throwIf(InferenceException.java:47)
at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ImportStatementDefinition$1.prerequisiteFailed(ImportStatementDefinition.java:103)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl.failModifier(ModifierImpl.java:91)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:292)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.addSourceExceptions(BuildGlobalContext.java:215)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.completePhaseActions(BuildGlobalContext.java:284)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.buildEffective(BuildGlobalContext.java:176)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:105)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:123)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:169)
... 34 more


Tx,
M.
--
Michael Vorburger <vorburger@...> | IRC: vorburger @freenode | G/Hangout: michael.vorburger | Skype: mike_vorburger | ~ = http://vorburger.ch