mojohaus / nbm-maven-plugin

moved to https://github.com/apache/incubator-netbeans-mavenutils/
http://www.mojohaus.org/nbm-maven-plugin/
24 stars 19 forks source link

Project depends on packages not accessible at runtime #11

Open forman opened 9 years ago

forman commented 9 years ago

My NB platform application has two modules A and B:

In the attached(?) show case module A is "private_classes_bug-sample" and module B is "private_classes_bug-sample2". Module A includes jython-standalone.jar which embeds javax.xml.*. Module B makes use of the class javax.xml.transform.TransformerException.

$ cd private_classes_bug $ mvn clean package ... [INFO] Private classes referenced in module: [javax.xml.transform.TransformerException] [ERROR] Project depends on packages not accessible at runtime in module com.mycompany:private_classes_bug-sample:jar:1.0-SNAPSHOT [INFO]----------------------------------------------------------------------- ...

See also https://netbeans.org/projects/platform/lists/dev/archive/2014-11/message/24

mkleint commented 9 years ago

do you know what is the reason for shipping classes from jdk as part of a binary? AFAIK you might get weird problems at runtime as well, because A. the base netbeans classloader will contain the class through jdk bootstrap. B. one of the modules will contain the same class but load it though a different classloader (the module one)

forman commented 9 years ago

I guess Jython embeds javax.xml for supporting JRE versions that don't come with javax packages. Maybe I should wrap the Jython library into an NBM so that the javax stuff is truly private for Jython?

Enkuushka commented 8 years ago

Hello @mkleint I have a problem while writing module which wraps dependencies.

I have 2 modules which both use Library A. But when I add Library A as dependency to each of the modules on the runtime it is showing " LinkageError: loader constraint violation: loader (instance of org/netbeans/StandardModule$OneModuleClassLoader) previously initiated loading for a different type with name "com/org/lib...."

And when I make 1 module which exports Library A as a public package. (Even the button for making public is not available, I just added to the pom.xml directly and it appeared in the Public packages tab) And still not compiling.

And then I added "OpenIDE-Module-Public-Packages" to the module manifest. But also not working.

Can you provide any working example pom.xml file?

mkleint commented 8 years ago

@Enkuushka The general approach is to have Module B wrap library A and then have modules C,D,E depend of module B rather than library A. The mentioned module needs to expose public packages of the library though. http://www.mojohaus.org/nbm-maven-plugin/manifest-mojo.html#publicPackages Just verify that the module when build actually has the relevant entry in the jar's manifest. Also check that your nbm file contains the library A binary.

As far as examples go, I have one for public packages - https://bitbucket.org/mkleint/nb-atlassian-dev/src/d8595132353c96bb2b0031d95eb6e0ab625a6439/atlassian-common/pom.xml?at=default&fileviewer=file-view-default but it doesn't do public packages from a library, but that should be irrelevant. Alternatively try searching for sources of other maven netbeans platform apps.