os-xtoo icon indicating copy to clipboard operation
os-xtoo copied to clipboard

[maven] Generate *.java from *.mdo files via ModelloCLI

Open wltjr opened this issue 6 years ago • 7 comments

Figure out ModelloCLI to be able to process Maven's *.mdo files into *.java files. Created codehaus-plexus/modello/issues/15 on ModelloCLI usage, and inability to load Java plugin. Or what ever is necessary to process the mdo files. Not able to find any documentation on CLI usage. Started discussion on ModelloCLI on Maven development mailing list.

For time being switching to pre-generated sources from Maven central. Which is not ideal as it does not work for live building. Nor provides any means to generated said source files for proper from source build.

Affected packages

  • dev-java/maven-compat
  • dev-java/maven-core
  • dev-java/maven-embedder
  • dev-java/maven-builder
  • dev-java/maven-model
  • dev-java/maven-plugin-api
  • dev-java/maven-repository-metadata
  • dev-java/maven-settings
  • dev-java/plexus-sec-dispatcher

wltjr avatar Jun 25 '18 19:06 wltjr

did you try to use the Ant bootstrap build that was in Maven until 3.3.9?

hboutemy avatar Aug 26 '18 16:08 hboutemy

No I have not tried to use that, and not sure I can use that for building maven. I would need to package that from source and build that. I really try to avoid any binary packages. Though I will look into that route.

I need to experiment, but the issue with ModelloCli may come from Plexus. I am using plexus-containers, and I may need to switch to eclipse plexus-sisu. Maven failed to build against plexus-containers, and had a lot of output https://github.com/Obsidian-StudiosInc/os-xtoo/issues/54#issuecomment-414865849. I have no build issues with Modello or Plexus. Still maybe swapping plexus-containers for sisu-plexus out well help.

That being said, I see a similar issue on startup of Maven I packaged from source in https://github.com/Obsidian-StudiosInc/os-xtoo/issues/54#issuecomment-415233330

[ERROR] Error executing Maven.
[ERROR] java.util.NoSuchElementException
      role: org.apache.maven.eventspy.internal.EventSpyDispatcher
  roleHint:
[ERROR] Caused by: null

That class is part of maven-core and is packaged and present. But it seems it cannot be found. Much like Modello cannot find Java plugin. The role and roleHint from that error output, makes me think it is Plexus related. Those are Plexus component descriptor concepts.

wltjr avatar Aug 26 '18 16:08 wltjr

the Ant bootstrap worked perfectly for Maven 3.3.9. Even if you don't want to use Ant, I suppose it's a good starting point to create a shell-based build script: https://github.com/apache/maven/blob/maven-3.3.9/build.xml.

I don't see why Plexus container would not work, unless some Maven components are marked with javax.inject tags: it's the only feature Plexus container does not have

hboutemy avatar Aug 26 '18 17:08 hboutemy

notice I see you seem to be using Java 11: using Java 8 first may be wiser, you're maybe mixing multiple causes.

hboutemy avatar Aug 26 '18 17:08 hboutemy

My environment no longer supports Java 8, and come January it will only be available via openjdk. Java 11 release next month. I can switch to Java 10. I guess that could be the issue. I was on 9 when I first packaged Modello. I haven't seen to many issues with most things under 11 so this would be unique. Most issues I run into are compile issues, class moves, changes, etc.

wltjr avatar Aug 26 '18 17:08 wltjr

Shell based build is basically what Gentoo does, ebuilds are just bash scripts. The problem is ModelloCli fails to find the Java plugin to process mdo files into java. I can use ant, so long as it does now download anything. I would not use it for build, just for to process mdo files into java.

For Maven, plexus-container either changed or did not have the changes that were in sisu-plexus. Basically the same package just different names mostly with some class and method changes. Not sure if the function is different per the difference of each.

wltjr avatar Aug 26 '18 17:08 wltjr

I swapped out plexus-container-default for sisu-plexus. That totally changed the output. I think I need to replace all instances of plexus-container-default with sisu-plexus. I am also seeing the same exception I am seeing in Maven now.

# modello src/main/mdo/extension.mdo java src/main/java 4.0.0 false true
[WARNING] Error contextualizing: org.codehaus.modello.plugin.java.JavaModelloGenerator@4b213651
org.codehaus.plexus.context.ContextException: Unable to lookup required component
        at org.codehaus.modello.plugin.AbstractModelloGenerator.contextualize(AbstractModelloGenerator.java:285)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.contextualize(PlexusLifecycleManager.java:282)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.activate(PlexusLifecycleManager.java:203)
        at org.eclipse.sisu.bean.BeanScheduler.schedule(BeanScheduler.java:151)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.manage(PlexusLifecycleManager.java:147)
        at org.eclipse.sisu.plexus.PlexusBeanBinder.afterInjection(PlexusBeanBinder.java:72)
        at com.google.inject.internal.MembersInjectorImpl.notifyListeners(MembersInjectorImpl.java:131)
        at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:125)
        at com.google.inject.internal.ConstructorInjector$1.call(ConstructorInjector.java:98)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:112)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:127)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
        at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:93)
        at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:306)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
        at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1086)
        at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
        at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:85)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:57)
        at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:66)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:112)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:127)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
        at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:47)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
        at org.eclipse.sisu.inject.Guice4$1.get(Guice4.java:162)
        at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81)
        at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
        at java.base/java.util.AbstractMap.get(AbstractMap.java:187)
        at org.codehaus.modello.plugin.AbstractPluginManager.getPlugin(AbstractPluginManager.java:59)
        at org.codehaus.modello.core.DefaultGeneratorPluginManager.getGeneratorPlugin(DefaultGeneratorPluginManager.java:38)
        at org.codehaus.modello.core.DefaultModelloCore.generate(DefaultModelloCore.java:374)
        at org.codehaus.modello.Modello.generate(Modello.java:65)
        at org.codehaus.modello.ModelloCli.main(ModelloCli.java:49)
Caused by: org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException
      role: org.sonatype.plexus.build.incremental.BuildContext
  roleHint:
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:267)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:243)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:237)
        at org.codehaus.modello.plugin.AbstractModelloGenerator.contextualize(AbstractModelloGenerator.java:281)
        ... 34 more
Caused by: java.util.NoSuchElementException
        at java.base/java.util.Collections$EmptyIterator.next(Collections.java:4208)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
        ... 37 more
[main] WARN Sisu - Error injecting: org.codehaus.modello.plugin.java.JavaModelloGenerator
com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) org.codehaus.plexus.context.ContextException: Unable to lookup required component
  while locating org.codehaus.modello.plugin.java.JavaModelloGenerator

1 error
        at com.google.inject.internal.InternalProvisionException.toProvisionException(InternalProvisionException.java:226)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1053)
        at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1086)
        at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
        at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:85)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:57)
        at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:66)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:112)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:127)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
        at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:47)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
        at org.eclipse.sisu.inject.Guice4$1.get(Guice4.java:162)
        at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81)
        at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
        at java.base/java.util.AbstractMap.get(AbstractMap.java:187)
        at org.codehaus.modello.plugin.AbstractPluginManager.getPlugin(AbstractPluginManager.java:59)
        at org.codehaus.modello.core.DefaultGeneratorPluginManager.getGeneratorPlugin(DefaultGeneratorPluginManager.java:38)
        at org.codehaus.modello.core.DefaultModelloCore.generate(DefaultModelloCore.java:374)
        at org.codehaus.modello.Modello.generate(Modello.java:65)
        at org.codehaus.modello.ModelloCli.main(ModelloCli.java:49)
Caused by: org.codehaus.plexus.context.ContextException: Unable to lookup required component
        at org.codehaus.modello.plugin.AbstractModelloGenerator.contextualize(AbstractModelloGenerator.java:285)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.contextualize(PlexusLifecycleManager.java:282)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.activate(PlexusLifecycleManager.java:203)
        at org.eclipse.sisu.bean.BeanScheduler.schedule(BeanScheduler.java:151)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.manage(PlexusLifecycleManager.java:147)
        at org.eclipse.sisu.plexus.PlexusBeanBinder.afterInjection(PlexusBeanBinder.java:72)
        at com.google.inject.internal.MembersInjectorImpl.notifyListeners(MembersInjectorImpl.java:131)
        at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:125)
        at com.google.inject.internal.ConstructorInjector$1.call(ConstructorInjector.java:98)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:112)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:127)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
        at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:93)
        at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:306)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
        ... 20 more
Caused by: org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException
      role: org.sonatype.plexus.build.incremental.BuildContext
  roleHint:
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:267)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:243)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:237)
        at org.codehaus.modello.plugin.AbstractModelloGenerator.contextualize(AbstractModelloGenerator.java:281)
        ... 34 more
Caused by: java.util.NoSuchElementException
        at java.base/java.util.Collections$EmptyIterator.next(Collections.java:4208)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
        ... 37 more
Exception in thread "main" com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) org.codehaus.plexus.context.ContextException: Unable to lookup required component
  while locating org.codehaus.modello.plugin.java.JavaModelloGenerator
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.MergedModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.codehaus.modello.plugin.ModelloGenerator annotated with @com.google.inject.name.Named(value="java")

1 error
        at com.google.inject.internal.InternalProvisionException.toProvisionException(InternalProvisionException.java:226)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1053)
        at org.eclipse.sisu.inject.Guice4$1.get(Guice4.java:162)
        at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81)
        at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
        at java.base/java.util.AbstractMap.get(AbstractMap.java:187)
        at org.codehaus.modello.plugin.AbstractPluginManager.getPlugin(AbstractPluginManager.java:59)
        at org.codehaus.modello.core.DefaultGeneratorPluginManager.getGeneratorPlugin(DefaultGeneratorPluginManager.java:38)
        at org.codehaus.modello.core.DefaultModelloCore.generate(DefaultModelloCore.java:374)
        at org.codehaus.modello.Modello.generate(Modello.java:65)
        at org.codehaus.modello.ModelloCli.main(ModelloCli.java:49)
Caused by: org.codehaus.plexus.context.ContextException: Unable to lookup required component
        at org.codehaus.modello.plugin.AbstractModelloGenerator.contextualize(AbstractModelloGenerator.java:285)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.contextualize(PlexusLifecycleManager.java:282)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.activate(PlexusLifecycleManager.java:203)
        at org.eclipse.sisu.bean.BeanScheduler.schedule(BeanScheduler.java:151)
        at org.eclipse.sisu.plexus.PlexusLifecycleManager.manage(PlexusLifecycleManager.java:147)
        at org.eclipse.sisu.plexus.PlexusBeanBinder.afterInjection(PlexusBeanBinder.java:72)
        at com.google.inject.internal.MembersInjectorImpl.notifyListeners(MembersInjectorImpl.java:131)
        at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:125)
        at com.google.inject.internal.ConstructorInjector$1.call(ConstructorInjector.java:98)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:112)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:127)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
        at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:93)
        at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:306)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
        at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1086)
        at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
        at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:85)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:57)
        at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:66)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:112)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:127)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
        at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:47)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
        ... 9 more
Caused by: org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException
      role: org.sonatype.plexus.build.incremental.BuildContext
  roleHint:
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:267)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:243)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:237)
        at org.codehaus.modello.plugin.AbstractModelloGenerator.contextualize(AbstractModelloGenerator.java:281)
        ... 34 more
Caused by: java.util.NoSuchElementException
        at java.base/java.util.Collections$EmptyIterator.next(Collections.java:4208)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
        ... 37 more

wltjr avatar Aug 26 '18 19:08 wltjr