blob: b0495a4537356a6d0d7aff7e4f69c2a78f87166e [file] [log] [blame]
----
Packaging Applications in NPanday
----
----
2012-01-09
----
~~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.
Packaging Applications in NPanday
Ususally an application needs more than a EXE or DLL in order to be executed. This topic is about how to
package your application in a way that makes it runnable.
The packaging itself is done by various Maven plugins, depending on the package format; but all handle packaging in
a similar fashion.
[[1]] <<<pre-package:>>> Collect the needed files (including dependencies) into a directory
in <<<target/packages/*>>> and possibly filter/transform configuration settings.
[[2]] <<<package:>>> Somehow pack up the collected files in the desired format and attach it
as project artifact.
[]
Collecting files for a package utilizes components from the
{{{http://maven.apache.org/plugins/maven-assembly-plugin/}Maven Assembly Plugin}} and hence supports both the
{{{http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html}Assembly Descriptor}} and the
{{{http://maven.apache.org/plugins/maven-assembly-plugin/component.html}Component Descriptor}}.
The two main project types that require packaging are web applications and executables (dll/exe). Packaging for
these is delivered by each its plugin, the {{{../../plugins/aspnet-maven-plugin/index.html}aspnet-maven-plugin}}
and {{{../../plugins/aspnet-maven-plugin/index.html}application-maven-plugin}}.
* Apply configuration transformations
NPanday supports configuration transformations through
{{{http://msdn.microsoft.com/en-us/library/dd465326.aspx}Microsoft Xml Document Transform}}, also called XDT. This
enables modifications for config files before they make it into the package. While Visual Studio (2008+) only supports
XDT for web.config, NPanday can apply it to all config files, even with other extensions than <<<*.config>>>
By default, NPanday will transform all <<<\<name\>.config>>> files using a corresponding XDT transformation named
<<<\<name\>.package.config>>>.
<<XDT currently only works with .NET 3.5 and 4.0!>>
Read about the <<<process-configs>>> goals in the plugin reference for packaging mojos in order to find out, how you
tweak the config handling.
* Take control over what gets packaged
NPandays packaging plugins try to find sensible defaults for the required package format, but those can be overridden
in three different ways:
* <<Extend:>> The simplest is to <add> files to the packaging through custom component descriptors. These can be
as local files, or through embedded jar resources.
Usually this is done through the plugin configuration property <<<mixinAssemblyComponentDescriptors>>> like this:
+---+
<configuration>
<mixinAssemblyComponentDescriptors>
<mixinAssemblyComponentDescriptor>custom-assembly-component.xml</mixinAssemblyComponentDescriptor>
</mixinAssemblyComponentDescriptors>
</configuration>
+---+
And then by provide the file: <<<$basedir\custom-assembly-component.xml>>>
+---+
<component xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/component/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/component/1.1.2 http://maven.apache.org/xsd/component-1.1.2.xsd">
<fileSets>
<fileSet>
<useDefaultExcludes>true</useDefaultExcludes>
<directory>\${project.basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>copy-also.txt</include>
</includes>
</fileSet>
</fileSets>
</component>
+---+
* <<Replace:>> If the default packaging doesn't fit at all, or includes files, it shouldn't include, you
can completely take control over the files to include in the package:
Configuration:
+---+
<configuration>
<assemblyDescriptor>custom-assembly.xml</assemblyDescriptor>
</configuration>
+---+
And the file:
+---+
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>custom-assembly</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>dir</format>
</formats>
<fileSets>
<fileSet>
<useDefaultExcludes>true</useDefaultExcludes>
<directory>\${project.basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>please-copy.aspx</include>
</includes>
</fileSet>
</fileSets>
</assembly>
+---+
* <<Compose:>> This is a mix of the previous two. You replace by using a custom assembly descriptor, but you then
use some of the component descriptors provided by NPanday:
+---+
<assembly ..>
[..]
<componentDescriptors>
<componentDescriptor>/assemblies/components/aspnet-webapp-binaries.xml</componentDescriptor>
[..]
</componentDescriptors>
[..]
</assembly>
+---+