diff options
Diffstat (limited to 'src/site/apt/intro.apt')
-rw-r--r-- | src/site/apt/intro.apt | 243 |
1 files changed, 0 insertions, 243 deletions
diff --git a/src/site/apt/intro.apt b/src/site/apt/intro.apt deleted file mode 100644 index 1c62bd9..0000000 --- a/src/site/apt/intro.apt +++ /dev/null @@ -1,243 +0,0 @@ - --- -Maven NAR Plugin - --- - --- -Mark Donszelmann - --- - -Introduction - - NOTE: <<bold>> print is <<NOT implemented yet>>. - - This plugin for Maven 2 allows you to compile native code (c++, c and fortran) on -a number of different architectures (Linux, Windows, MacOSX, Solaris, ...) and with -a number of different compilers/linkers (g++, Microsoft Visual C++, CC, ...) -The output produced is wrapped up in Native ARchive files (.nar) some of which -are machine independent (-noarch), while others are machine specific and thus depend -on a combination of machine architecture(A), operating-system(O) and linker(L) identified -as AOL. -These nar files can be installed in the local maven repository and deployed to a -standard maven (web) server, using the standard maven-install-plugin and maven-deploy-plugin. - - Other maven projects may specify dependencies on these nar files using the standard -maven dependency declaration. Nar files get downloaded, unpacked and -installed in the local maven repository, just like jar files are (apart from the -unpacking). - - The NAR plugin executes the following goals, in the order below, to create and deploy nar files. -The goals are part of the -<<<nar>>> packaging/{{{lifecycle.html}lifecycle}}, which inserts the nar goals into the standard lifecyle. Using nar packaging -allows you to build a jar file as well as nar files. The list below shows the sequence of the NAR goals: - - [[1]] {{{#nar-download}nar-download}} - - [[2]] {{{#nar-system-generate}nar-system-generate}} - - [[3]] {{{#nar-unpack}nar-unpack}} - - [[4]] {{{#nar-resources}nar-resources}} - - [[5]] {{{#nar-javah}nar-javah}} - - [[6]] {{{#nar-compile}nar-compile}} - - [[7]] {{{#nar-testCompile}nar-testCompile}} - - [[8]] {{{#nar-test}nar-test}} - - [[9]] {{{#nar-package}nar-package}} - - [[10]] {{{#nar-integration-test}nar-integration-test}} - - [[11]] {{{#install}install (standard maven goal)}} - - [[12]] {{{#deploy}deploy (standard maven goal)}} - - [] - -* Initialization - - The NAR Plugin starts off by setting and deducing all kinds of property values for usage -in the goals below. The configuration section of the NAR plugin allows one to override -most of the default settings. The default settings come from the AOL properties file -which allows us to specify different defaults depending on the architecture-os-linker -combination, see {{{aol.html}AOL Properties}}. - - The NAR Plugin tries to deduce the "Operating System" -and the "Architecture" of the machine. Both can be overridden by setting <<<os>>> -and <<<arch>>> in the {{{configuration.html}configuration}}. - - The name of the linker is looked up in a architecture-os specific way, but can be overridden -by setting <<<linker.name>>> (this means the subtag \<name\> of the \<linker\> tag in the -configuration section). Now that the linker name is known -all other properties are looked up with a prefix of <<<[arch.[os.[linker.]]]>>> from the AOL Properties -file, but can be overridden in the configuration section (which can be made AOL specific by -putting it inside a profile. - - -* {nar-download} - - Your NAR artifact(s) may be dependent on other nar artifacts. The standard maven dependency -declaration in the POM is used to describe such dependencies, see {{{nar-dependencies.html} -nar-dependencies}}. By the time this goal is running maven will have already downloaded -all dependent jar files some of which may include a nar.properties file. -This property file contains information on what other machine dependent and machine independent nar files to download. -This goal will download any further necessary nar files into the local repository. - -* {nar-system-generate} - - This goal generates a NarSystem class if necessary. This class contains helper methods for your -code to handle things at run-time. The static method "loadLibrary()" is currently the only method -generated and will load your JNI library with name "artifactId-version". This goals only executed -if you produce a JNI library and you specify a <packageName> as subtag of <library>. The NarSystem -class will then end up in this package. - -* {nar-unpack} - - Since a nar file is of no use to any native compilation process the nar-unpack goal unpacks the nar into -the "nar" subdirectory of the local repository. A flag is set not to download and unpack this nar file again, -except if it is a SNAPSHOT artifact. <<TBD The actual nar file is deleted to preserve diskspace.>> - -* {nar-resources} - - This is an optional goal. It will take any resources in src/nar/resources and copy them into -specific areas under target/nar. Resources may include pre-compiled/linked libraries and other -shareable items. This goal can be used to create a nar library from a distribution that comes -with compiled shareable libraries. - -* {nar-javah} - - This goal will run the javah tool on any class file in the <<<javah.classDirectory>>> directory -that has native methods in it. The actual class files are inspected (rather than their sources). -The javah tool is picked up from the java installation and is run with a classpath of the -<<<javah.classDirectory>>> and all depencies' classpaths, unless you specify a list in <<<javah.classPaths>>>. -You can also set a boot classpath using <<<javah.bootClassPaths>>>. - - This goal has no effect if there are no java sources, or if none of the java classes contain a native -method. - -* {nar-compile} - - This goal will compile the native source code (c, c++ or fortran) and archive it into a shared library. -You can also produce a jni or a static library by setting <<<library.type>>>. -To handle the variety of compilers and linkers, the NAR plugin uses the cpptasks from the ant-contrib -project, with some minor improvements and additions of compilers, see {{{cpptasks.html}cpptasks}}. -Most of the settings for cpptasks, such as compiler, linker, options and include dirs are available -through the NAR plugin, see {{{configuration.html}configuration}}. - - The NAR plugin searches the directory structure under COMPILER.sourceDirectory, which defaults to -src/main. The standard way to separate your sources for different languages would be src/main/c, src/main/c++ -and src/main/fortran, but any file under src/main is searched for. - - The nar plugin will automatically select the correct compiler (c, c++ or fortran) based on the type of -source, as specified in the patterns in <<<AOL.c.includes>>>, -<<<AOL.cpp.includes>>> and <<<AOL.fortran.includes>>>, where AOL is a dotted qualifier of the architecture, -os and linker (x86.Windows.msvc for example). - - Include paths are added in this order from: - - * any directories set in <<<COMPILER.includePaths>>>, where COMPILER is c, cpp or fortran. - - * the <<<javah.jniDirectory>>>. - - * only if <<<java.include>>> is true or if <<<javah.jniDirectory>>> - exists we add one of the following, relative to the java home directory: - - * <<<java.includePaths>>> if set, - - * otherwise the <<<AOL.java.include>>> property from the AOL properties. - - [] - - - * the header files of any of the nar type dependencies, unless it is a jni library. - - * any system directories set in <<<COMPILER.sysincludepath>>>, where COMPILER is c, cpp or fortran. - - [] - - The static or dynamic library is linked against: - - * the list of libraries set in <<<linker.libs>>>. Using nar dependencies is preferred though. - - * the libraries of any of the nar type dependencies. - - * the java virtual machine if you set - <<<java.link>>> to true. The location of the runtime can be overridden in <<<java.runtimeDirectory>>>. - - [] - - All include files from <<<COMPILER.includePaths>>> are copied to be included -in the noarch nar file. - - << TBD If you set maven.nar.includefilesonly to true the compilation step will be -skipped. This flag can be used if you want to distribute a library that only contains pure -abstract classes in include files.>> - - -* {nar-testCompile} - - This goal will compile the native test source code (c, c++ or fortran) and create executables from it. -To handle the variety of compilers and linkers, the NAR plugin uses the cpptasks from the ant-contrib -project, with some minor improvements and additions of compilers, see {{{cpptasks.html}cpptasks}}. -Most of the settings for cpptasks, such as compiler, linker, options and include dirs are available -through the NAR plugin, see {{{configuration.html}configuration}}. - - The NAR plugin searches the directory structure under COMPILER.sourceDirectory, which defaults to -src/test. The standard way to separate your sources for different languages would be src/test/c, src/test/c++ -and src/test/fortran, but any file under src/test is searched for. - - The compiler will automatically select the correct compiler (c, c++ or fortran) based on the type of -sources, as specified in the patterns in <<<AOL.c.includes>>>, -<<<AOL.nar.src.includes>>> and <<<AOL.fortran.includes>>>, where AOL is a dotted qualifier of the architecture, -os and linker (x86.Windows.msvc for example). - - <<TBD If you set maven.nar.includefilesonly to true the compile-tests goal will be -skipped.>> - - -* {nar-test} - - Runs any native tests as well as any executables that have been produced. - -* {nar-package} - - This goal creates the artifact jar/nar file(s). The jar file is created by the standard package goal. -The following jar and nar files are created: - - * \<Artifact\>-\<version\>.jar, containing a property file describing the behaviour of the - library and other nar files available. For a description see {{{nar-dependencies.html} - nar-dependencies}}. - - * \<Artifact\>-\<version\>-noarch.nar, a compressed jar file containing non machine - specific parts of the distribution, such as the include directories. - - * \<Artifact\>-\<version\>-\<aol\>-\<type\>.nar, a compressed jar file containing machine - specific parts of the distribution, such as the libraries. This file is specific to a particular - Architecture-OS-Linker (AOL) combination <<TBD and is not generated if maven.nar.includefilesonly - is set>>. Type specifies if this nar is either of type shared, static or jni. - - [] - -* {nar-integration-test} - - This goal runs tests against the packaged jar and nar files. Currently this is useful only to -test a jni library. The jni library is added to the java.library.path and the tests are forked to -pick up this path. - - To use this goal you need to put the test sources in the regular test directories but disable -the running of the tests by the maven-surefire-plugin. - - <<TBD integration tests for other types of libraries than jni>> - -* {install} - - This goal installs the produced artifacts in your local repository. The unpacking is done in the -unpack goal of a dependent artifact upon first usage. - - -* {deploy} - - This goal deploys the produced artifacts on a maven (web) server. The jar and nar files only consists -in their full form on the server and are never unpacked on the server. - |