blob: 11b081304bd279a384b3a5ed92adafa50e6e2cf4 [file] [log] [blame]
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
------
Maven 2 NBM Plugin
------
Milos Kleint
<mkleint@codehaus.org>
------
2007-06-15 Sep 30, 2008 Jun 15, 2007
HOW TO: Migrate from older version of the plugin
{{{Upgrading_to_3.9} Upgrading to 3.9}}
{{{Upgrading_to_3.8} Upgrading to 3.8}}
{{{Upgrading_from_2.6_version_to_3.0} Upgrading from 2.6 to 3.0}}
{{{Upgrading_from_2.4_version_to_2.5} Upgrading from 2.4 to 2.5}}
{Upgrading to 3.9}
In 3.9, the <<<populate-repository>>> goal is moved to separate plugin.
{Upgrading to 3.8}
In 3.8 the <<<descriptor>>> parameter is deprecated and is replaced by equivalent plugin parameters.
The values from descriptor are still applied, warnings are printed. In future releases the parameter will be removed.
{Upgrading from 2.6 version to 3.0}
There are a few significant incompatible changes introduced in <<3.0's>> version of
NBM packaging lifecycle. The result should be easier to setup builds and better support for building
NetBeans platform based applications.
* The lifecycle mappings have changed. There is no more <<<nbm:jar>>> goal and
it was replaced by <<<nbm:manifest>>> which is executed at different phase, namely <<<process-classes>>>, right after
the module's classes are compiled.
<<Important>>: In order to have maven-jar-plugin to pick up the generated manifest, you need to add the following
configuration snippet to your projects with <<<nbm>>> packaging.
+-----+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
+-----+
* The project's dependencies that shall end up on <<Class-Path>> of the module and
now processed transitively. In earlier versions, you had to either explicitly list
all such items in the pom as direct dependencies, or list them in the module descriptor.
Only transitive dependencies that descend from non-NetBeans module direct dependencies are
included, eg. if you depend on module that includes Apache's commons-httpclient, the library will not
be included (unless defined in your project directly). Possible trouble makers are transitive depedencies that are
defined both in a dependening module and a regular jar dependency. Based on Maven dependency tree resolution,
the binary could end up on the <<Class-Path>> or not. The resolution to the problem is to define
The troubled dependency directly and either define the scope as <<<provided>>> if you don't want it included in <<Class-Path>>,
or keep the default <<<compile>>> scope if you want.
* NBM file is always generated for any NetBeans module project. You can skip the NBM file
generation by setting the parameter to nbm:nbm goal, but please be aware that having NBM files in local and
remote repositories is crucial for the new tools that create a NetBeans Platform based application
binaries.
* In previous versions the ultimate final binary for the platform based application,
was a directory with the cluster(s) of modules. Now a new packaging is defined <<<nbm-application>>> that
allows for creating a final application zip file, webstartable jnlp files, and an update site.
All are constructed solely from the repository content (assuming all relevant modules have NBM files in repositories)
and the primary project for the binaries is the <<<nbm-application>>> packaging project, unlike in previous versions
where the root pom was the primary project and required all included modules to be built as part of the reactor
in the same build.
* The <<<nbm:manifest>>> goal besides generating the manifest, will also check if the runtime dependencies
match the actual classes being used in the project and it's libraries on <<Class-Path>>. That's analogous to
the {{{http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html}<<<dependency:analyze>>>}}
goal but takes the NetBeans module system constraints into account (non-transitivity of module dependencies,
public vs. private packages constraint etc)
* The previous versions didn't define the <<<OpenIDE-Module-Public-Packages>>> entry in the manifest file.
The result was a deprecated state that made all classes publicly accessible from other modules
and printed a warning to the application's log file. In <<3.0>>, we introduced a new optional parameter <<<publicPackages>>>
that lists all public packages in the module. If not defined, no package is exported as public. See
{{{https://github.com/mojohaus/nbm-maven-plugin/issues/3}issue}} for details. If you have previously
placed the <<OpenIDE-Module-Public-Packages>> entry in the manifest file manually, it will not be overriden by the new parameter.
=======================================================================
{Upgrading from 2.4 version to 2.5}
There are significant changes in how NetBeans module system dependencies are mapped to maven's own
dependencies model. The <<2.4>> and older version all module system deps had to be explicitly defined in the module descriptor at <<<src/main/nbm/module.xml>>>.
That is no longer a requirement in <<2.5>> for most cases. The plugin will try to decide based on the declaration
in maven POM file.
These are the rules:
* for NetBeans module dependencies (jars that have the NetBeans specific entries in META-INF/MANIFEST.MF)
* It's defined in existing (though optional) <<<module.xml>>> file in <<<dependencies>>> section.
* It's a direct dependency (non-transitive) and is a NetBeans module.
* When the dependency is of type <<<nbm>>>. Such dependencies don't include their transitive deps on compilation classpath.
* for module libraries (jars that are packed together with the module and appear on it's classpath directly, not by a dependency relationship.)
* It's defined in existing (though optional) <<<module.xml>>> file in <<<libraries>>> section
* It's a direct dependency (non-transitive) and is not of <<<provided>>> scope.
So if you have used <<2.4>> and older before, you need to check your dependencies when upgrading to <<2.5>>.
* The <<2.5>> plugin can pick up and declare more module dependencies than the previous version. Module dependencies are safe.
You either declared them in your <<<module.xml>>> file. Some additional ones can appear if you have them as direct dependencies in your pom.
Use the {{{http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html}<<<dependency:analyze>>>}} goal to check for used/unused direct dependencies.
* The <<2.5>> plugin can also pick up and declare more module libraries. That's something to watch out for! That happens again only when you declared the jars as direct dependencies.
You could end up with a single jar being added to multiple modules and get runtime classpath issues and of course your download size
will get higher than necessary. Again the {{{http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html}<<<dependency:analyze>>>}} goal shall help. If you know the jar is required but is provided by a module you depend on, use the <<<provided>>> scope to prevent inclusion.