[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

  • From: Jean-Marc Borer < >
  • To:
  • Subject: [nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)
  • Date: Fri, 1 Mar 2013 12:50:35 +0000

I agree that Imple deps are too rigid, but I need to use this
"backdoor". I did what you suggest in the first place, but it doesn't
work:

The org-netbeans-modules-xml module has its autoload param set to
"true" in its config file. When this value is "true" then ONLY if
another module explicitly depends on the latter, it will be loaded.

Declaring a dependency on org-netbeans-modules-xml in the application
is not enough. The module will not be loaded and neither will its
classes then. The only solution I found to "force" the loading of
org-netbeans-modules-xml is to depend on it explicitly in one of my
modules. However this seemed not enough because
org-netbeans-modules-xml has only a limited list of friends. This is
where the implementation dependency jumps in: to workaround the friend
issue I have to depend on its impl version. It is a kind of hack but
it is the price to pay to reuse modules from the IDE which where not
designed for this purpose in the first place.

Any other suggestion would be appreciated...

On Fri, Mar 1, 2013 at 12:39 PM, Wade Chandler 
< >
 wrote:
> Try to add it to application as a dependency. Impl deps are too rigid for
> most cases. That will make the module be included in the app yet your app
> modules won't have direct dependencies on it, but since it is in your app,
> modules you dep on which are friends of it will have it available. OSGi has
> similar dep qualifications btw. It and the nbm system are similar in that
> regard. Granted the mvn project structure orthoganal; subtle diffs in the
> way mvn deals with regular Java mods versus NB or OSGi.
>
> Wade
>
> On Mar 1, 2013 7:24 AM, "Jean-Marc Borer" 
> < >
>  wrote:
>>
>> Hmm I was too quick to celebrate: my module is not a "friend" of
>> org-netbeans-modules-xml. Therefore I cannot depend on it:   ...on
>> project core-services: Module has friend dependency on
>> org.netbeans.modules.xml but is not listed as a friend
>>
>> So how can I force to load  org-netbeans-modules-xml anyway?
>>
>> Implementation dependency? Is this correct?
>>
>>             <plugin>
>>                 <groupId>org.codehaus.mojo</groupId>
>>                 <artifactId>nbm-maven-plugin</artifactId>
>>                 <extensions>true</extensions>
>>                 <configuration>
>>                     <moduleDependencies>
>>                         <dependency>
>>
>> <id>org.netbeans.modules:org-netbeans-modules-xml</id>
>>                             <type>impl</type>
>>                             <explicitValue>201302132200</explicitValue>
>>                         </dependency>
>>                     </moduleDependencies>
>>                 </configuration>
>>             </plugin>
>>
>> On Fri, Mar 1, 2013 at 10:25 AM, Jean-Marc Borer 
>> < >
>> wrote:
>> > Yep. Depending on org-netbeans-modules-xml in any other of my MODULES,
>> > forces NB to load the module and gone are the ClassNotFound
>> > exceptions!
>> >
>> > On Fri, Mar 1, 2013 at 10:22 AM, Jean-Marc Borer 
>> > < >
>> > wrote:
>> >> Oups I missed somehting here: org-netbeans-modules-xml has its
>> >> attribute autoload to true.
>> >>
>> >> Maybe it is the culprit: as I include it only at the application level
>> >> and unfortunately no other module EXPLICITLY requires it, it will not
>> >> be loaded. Therefore the error. When I include
>> >> org-netbeans-modules-xml-tools, then I see that it explicitly has a
>> >> dependency to org-netbeans-modules-xml which forces NB to load the
>> >> module.
>> >>
>> >> So how can I force the loading of org-netbeans-modules-xml without
>> >> including org-netbeans-modules-xml-tools? I need to create a dummy
>> >> module of my own that depends on org-netbeans-modules-xm or is there
>> >> another option?
>> >>
>> >>
>> >>
>> >> On Fri, Mar 1, 2013 at 10:13 AM, Jean-Marc Borer 
>> >> < >
>> >> wrote:
>> >>> I have to add that neither org-netbeans-modules-xml-text nor
>> >>> org-netbeans-modules-xml are eager modules and both are can be found
>> >>> in the generated app under the ide modules node.
>> >>>
>> >>> On Fri, Mar 1, 2013 at 10:07 AM, Jean-Marc Borer 
>> >>> < >
>> >>> wrote:
>> >>>> Looking at org-netbeans-modules-xml-text manifest, there is no
>> >>>> dependency on  org-netbeans-modules-xml module. Very strange that in
>> >>>> one module you can refer to an action in your layer.xml file that is
>> >>>> located in another module to which you do not depend on.
>> >>>>
>> >>>> Anyway, it is the sytem class loader that cannot find the class. So I
>> >>>> suppose the it is its job to load all classes it finds in the
>> >>>> aggregated layer.xml. If it is really the case, AFAIK the system
>> >>>> classloader inherits from all module class loaders and therefore
>> >>>> should be able to find the XMLViewActions class since it is declared
>> >>>> as used module (I 've checked in the generated application).
>> >>>>
>> >>>> I am missing something here...
>> >>>>
>> >>>> On Fri, Mar 1, 2013 at 9:58 AM, Jean-Marc Borer 
>> >>>> < >
>> >>>> wrote:
>> >>>>> On Fri, Mar 1, 2013 at 9:16 AM, Milos Kleint 
>> >>>>> < >
>> >>>>> wrote:
>> >>>>>>>>>>
>> >>>>>>>>>> When you declare "jar" dependencies in your app or module pom,
>> >>>>>>>>>> it is
>> >>>>>>>>>> the Maven nbm plugin which will be in charge to resolve and
>> >>>>>>>>>> process
>> >>>>>>>>>> the dependencies (build a list of dependencies)  right?
>> >>>>>>>>
>> >>>>>>>> jar can mean a module dependency and a non-module dependency. The
>> >>>>>>>> nbm
>> >>>>>>>> plugin will examine the manifest to determine if the dependency
>> >>>>>>>> is a
>> >>>>>>>> module or not and will act accordingly. generate Class-Path entry
>> >>>>>>>> or
>> >>>>>>>> OpenIDE-module-dependencies entry.
>> >>>>>>>
>> >>>>>>>>
>> >>>>>>>> There should be a verification step in the nbm build that
>> >>>>>>>> attempts to
>> >>>>>>>> verify that your module is only using the right classes at
>> >>>>>>>> runtime and
>> >>>>>>>> that the model is consistent.
>> >>>>>>>
>> >>>>>>> So I suppose it will do that "recursively" for all transitive
>> >>>>>>> dependencies if it detects that you use some classes from it.
>> >>>>>>
>> >>>>>> yup.
>> >>>>>>
>> >>>>>>>
>> >>>>>>> If it is the case, I think I start understanding how it works for
>> >>>>>>> modules: the nbm plugin tries to check which classes you will need
>> >>>>>>> at
>> >>>>>>> runtime and in which modules they can be found. Then it adds a
>> >>>>>>> direct
>> >>>>>>> dependency to those modules.
>> >>>>>>>
>> >>>>>>
>> >>>>>> no, it just spits a warning/error for you to correct your pom (by
>> >>>>>> declaring a direct dependency)
>> >>>>>>
>> >>>>>>
>> >>>>>>> However what is still unclear for me, is how the nbm plugin is
>> >>>>>>> supposed to work when you try to add a dependency in your
>> >>>>>>> application
>> >>>>>>> (not module) to install some features in application like XML
>> >>>>>>> editor.
>> >>>>>>>
>> >>>>>>> Let's take the c->b->a modules example again. Suppose I want a
>> >>>>>>> feature
>> >>>>>>> from "c" in my application (important: not module, really the
>> >>>>>>> application project here). So I declare a dependency to "c" in my
>> >>>>>>> application pom.xml. What will happen to "b" and "a" knowing that
>> >>>>>>> "c"
>> >>>>>>> uses no classes from "a"? Will the nbm plugin find out all the
>> >>>>>>> module
>> >>>>>>> hiearchy and include all modules (a,b,c) or will it just include
>> >>>>>>> the
>> >>>>>>> first level ("b")?
>> >>>>>>
>> >>>>>> no sanity validation is performed on the the application side. The
>> >>>>>> main problem with setting up application's scope are eager modules
>> >>>>>> (those that none depends on but are providing crucial services)
>> >>>>>> These are more or less undetectable.
>> >>>>>
>> >>>>> I agree. Here you have to know (guess?) what you need to depend on.
>> >>>>>
>> >>>>>>
>> >>>>>> but I still don't understand your problem with setting up the
>> >>>>>> application with xml modules.
>> >>>>>> 1. a simple "jar" dependency pulls in all transitive deps (but
>> >>>>>> missing
>> >>>>>> out the important eagers)
>> >>>>>> http://screencast.com/t/iqoi8m05TQZ
>> >>>>>> 2. a nbm-file type dependency just lists the nbm binary
>> >>>>>> http://screencast.com/t/qtOUtkevMq
>> >>>>>> 3. nbm type lists just the single jar file binary.
>> >>>>>> http://screencast.com/t/mxATNqLrv
>> >>>>>
>> >>>>> Well I have an example (again with my XML editor). I want all the
>> >>>>> features except the ones coming from module
>> >>>>> org-netbeans-modules-xml-tools. So I leave out this module.
>> >>>>>
>> >>>>> When I build the application I get this exception:
>> >>>>>
>> >>>>> INFO [org.netbeans.modules.editor.impl.ActionsList]: Can't
>> >>>>> instantiate object
>> >>>>> java.lang.ClassNotFoundException:
>> >>>>> org.netbeans.modules.xml.actions.XMLViewActions
>> >>>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
>> >>>>> at java.security.AccessController.doPrivileged(Native Method)
>> >>>>> at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>> >>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>> >>>>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>> >>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>> >>>>> at
>> >>>>> org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:222)
>> >>>>> Caused: java.lang.ClassNotFoundException:
>> >>>>> org.netbeans.modules.xml.actions.XMLViewActions starting from
>> >>>>> SystemClassLoader[107 modules] with possible defining loaders null
>> >>>>> and
>> >>>>> declared parents [org.netbeans.MainImpl$BootClassLoader@f7e6a96,
>> >>>>> ModuleCL@5ebbfa5c[org.netbeans.api.annotations.common],
>> >>>>> ModuleCL@5b0d95cd[org.openide.awt],
>> >>>>> ModuleCL@61128f5a[org.netbeans.api.progress],
>> >>>>> ModuleCL@18f42160[org.openide.dialogs],
>> >>>>> ModuleCL@36eb7331[org.openide.nodes],
>> >>>>> ModuleCL@6defe475[org.openide.windows],
>> >>>>> ModuleCL@30dc9065[org.netbeans.modules.editor.mimelookup],
>> >>>>> ModuleCL@3362a63[org.openide.text],
>> >>>>> ModuleCL@6ac67a88[org.netbeans.swing.tabcontrol], ...92 more]
>> >>>>> at
>> >>>>> org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:224)
>> >>>>> at
>> >>>>> org.netbeans.ModuleManager$SystemClassLoader.loadClass(ModuleManager.java:720)
>> >>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>> >>>>> at
>> >>>>> org.openide.loaders.InstanceSupport.findClass(InstanceSupport.java:502)
>> >>>>> at
>> >>>>> org.openide.loaders.InstanceSupport.instanceClass(InstanceSupport.java:148)
>> >>>>> at
>> >>>>> org.openide.loaders.InstanceDataObject$Ser.instanceClass(InstanceDataObject.java:1338)
>> >>>>> at
>> >>>>> org.openide.loaders.InstanceSupport.instanceOf(InstanceSupport.java:182)
>> >>>>> at
>> >>>>> org.openide.loaders.InstanceDataObject$Ser.instanceOf(InstanceDataObject.java:1362)
>> >>>>> at
>> >>>>> org.openide.loaders.InstanceDataObject.instanceOf(InstanceDataObject.java:828)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.impl.ActionsList.isSeparator(ActionsList.java:201)
>> >>>>> [catch] at
>> >>>>> org.netbeans.modules.editor.impl.ActionsList.convertImpl(ActionsList.java:146)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.impl.ActionsList.<init>(ActionsList.java:85)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.impl.PopupMenuActionsProvider.<init>(PopupMenuActionsProvider.java:76)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.impl.PopupMenuActionsProvider.createInstance(PopupMenuActionsProvider.java:80)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.impl.PopupMenuActionsProvider.createInstance(PopupMenuActionsProvider.java:60)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.mimelookup.impl.InstanceProviderLookup.rebuild(InstanceProviderLookup.java:90)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.mimelookup.impl.InstanceProviderLookup.initialize(InstanceProviderLookup.java:85)
>> >>>>> at
>> >>>>> org.openide.util.lookup.AbstractLookup.enterStorage(AbstractLookup.java:176)
>> >>>>> at
>> >>>>> org.openide.util.lookup.AbstractLookup.lookupItem(AbstractLookup.java:430)
>> >>>>> at
>> >>>>> org.openide.util.lookup.AbstractLookup.lookup(AbstractLookup.java:421)
>> >>>>> at org.openide.util.lookup.ProxyLookup.lookup(ProxyLookup.java:223)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.mimelookup.impl.SwitchLookup.lookup(SwitchLookup.java:90)
>> >>>>> at org.openide.util.lookup.ProxyLookup.lookup(ProxyLookup.java:223)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.impl.PopupMenuActionsProvider.getPopupMenuItems(PopupMenuActionsProvider.java:67)
>> >>>>> at
>> >>>>> org.netbeans.modules.editor.NbEditorKit.call(NbEditorKit.java:1002)
>> >>>>> at
>> >>>>> org.openide.text.CloneableEditor$DoInitialize.initNonVisual(CloneableEditor.java:610)
>> >>>>> at
>> >>>>> org.openide.text.CloneableEditor$DoInitialize.run(CloneableEditor.java:369)
>> >>>>> at
>> >>>>> org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1454)
>> >>>>> at
>> >>>>> org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2048)
>> >>>>>
>> >>>>> So I looked where this XMLViewActions is used (referred to).
>> >>>>>
>> >>>>>
>> >>>>> I found it in the layer.xml file of the
>> >>>>> org-netbeans-modules-xml-text module.
>> >>>>>
>> >>>>> Now this is the situation
>> >>>>>
>> >>>>> I directly depend on: org-netbeans-modules-xml which depends on
>> >>>>> org-netbeans-modules-xml-text as you can see in
>> >>>>>
>> >>>>> http://bits.netbeans.org/nexus/content/groups/netbeans/org/netbeans/modules/org-netbeans-modules-xml/RELEASE73/org-netbeans-modules-xml-RELEASE73.pom
>> >>>>>
>> >>>>> So both modules are supposed to be on the classpath. So why does
>> >>>>> org-netbeans-modules-xml-text not find the class XMLViewActions
>> >>>>> which
>> >>>>> is located in org-netbeans-modules-xml and it works when I include
>> >>>>> module org-netbeans-modules-xml-tools
>> >>>>>
>> >>>>> (http://bits.netbeans.org/nexus/content/groups/netbeans/org/netbeans/modules/org-netbeans-modules-xml-tools/RELEASE73/org-netbeans-modules-xml-tools-RELEASE73.pom)?
>> >>>>>
>> >>>>>
>> >>>>>>
>> >>>>>> nothing is stopping you from using method 1. to include standard
>> >>>>>> modules just like you would your own.
>> >>>>>> cluster poms use method 2 because we want to have non-intersection
>> >>>>>> sets of modules that can be excluded from a single cluster
>> >>>>>> dependency.
>> >>>>>>
>> >>>>>> Milos
>> >>>>>>
>> >>>>>>>
>> >>>>>>> Cheers,
>> >>>>>>>
>> >>>>>>> Jean-Marc
>> >>>>>>>
>> >>>>>>> PS: once I understand all of these details, I will try to publish
>> >>>>>>> a
>> >>>>>>> entry somewhere on the internet for others. Unfortunately docs
>> >>>>>>> about
>> >>>>>>> this topics are rare or not related to Maven...


[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

(continued)

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Milos Kleint 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Wade Chandler 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Wade Chandler 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Wade Chandler 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Wade Chandler 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Milos Kleint 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Milos Kleint 03/01/2013

[nbdev] Re: Maven Netbeans builds and dependencies issues (especially transitive ones)

Jean-Marc Borer 03/01/2013

Project Features

About this Project

www was started in November 2009, is owned by jpirek, and has 25 members.
By use of this website, you agree to the NetBeans Policies and Terms of Use (revision 20150226.965aeb8). © 2014, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo
 
 
Close
loading
Please Confirm
Close