Skip to content

sdedwards/nar-maven-plugin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

The NAR plugin for Maven 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.

Links

FAQ

Q: Is this repository (https://github.com/maven-nar/nar-maven-plugin) the official home of the NAR plugin?

A: Yes. @duns, the original author, donated the plugin (with Sonatype's approval) to the community, since he no longer has time to maintain it.

Q: Is the NAR project being actively maintained?

A: Yes, it is now. It was rather dormant for the past few years, but now has at least two active maintainers (@ctrueden and @dscho), with a few others participating in the development as well.

Q: Why was the plugin renamed to nar-maven-plugin?

A: To comply with the permitted usages of the Maven trademark. According to the Apache Project Management Committee:

The pmc is permitting persons who develop plugins for maven to use the mark maven in their plugin name provided the name and its usage meets certain criteria, amongst which is the "\_\_\_-maven-plugin" naming scheme.
The NAR plugin was previously named `maven-nar-plugin` because it was slated for adoption as an official Maven plugin, but that never happened. So the `artifactId` has been changed to `nar-maven-plugin`. (The `groupId` will need to change as well, but that is still pending.)

Q: Where is the official forum/list?

A: The maven-nar Google group.

Q: Where is the official issue tracker?

A: GitHub Issues. There was a category for NAR in the Sonatype JIRA, which was active until May 2013, but it has apparently been deleted, so we unfortunately cannot migrate those issues to GitHub. If you had filed an issue there which is still relevant to the latest master branch, please file a new GitHub issue for it. Thanks!

Q: When do you expect the 3.0.0 release? Will it be deployed to Central?

A: Yes, we plan to deploy to Central, but we have no set timeline for a release. If it is something you need urgently, please write to the list about it. All of the current NAR maintainers have day jobs, and so have limited time to spend on NAR. So this project is largely driven by A) submitted pull requests; B) the needs of the maintainers; and C) community complaints. ;-)

Q: Is there a public Maven repository with release builds?

A: Although we have not yet deployed a stable 3.0.0 release to Central, the SciJava project publishes UNOFFICIAL releases to its Maven repository:

<pluginRepository>
    <id>imagej.thirdparty</id>
    <url>http://maven.imagej.net/content/repositories/thirdparty</url>
</pluginRepository>

As of this writing, the newest such release is:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>nar-maven-plugin</artifactId>
    <version>3.0.0-scijava-2</version>
</plugin>

The corresponding source is tagged on GitHub.

Q: Where can I find a working example of how to configure the NAR plugin?

A: Several open source projects make use of the NAR plugin:

  1. DevZendo Cross-Platform FileSystem Access uses NAR. The POM is straightforward and may be a good first project to study for learning about NAR.
  2. SLIM-curve uses NAR with some extra configuration, and may be a good second project to study for seeing a few more parameters in action.
  3. ImageJ has a native launcher component which uses NAR. Search the pom.xml for "nar" to find the relevant blocks. It is not a simple "hello world" example (e.g., it uses OS-specific profiles), but it is a working real-world use case which successfully builds on a Jenkins server farm including Windows, OS X and Linux nodes.

We would gladly welcome any other working examples of the NAR plugin in use!

Q: How can I test the latest SNAPSHOTs?

A: To use the latest code on the master branch and/or topic branches: clone the code from GitHub, and build it using mvn install. This installs the JAR into your local Maven repository cache (typically at ~/.m2/repository/com/github/maven-nar/nar-maven-plugin/3.0.0-SNAPSHOT). Then add a reference to the plugin within your project's POM:

<plugin>
    <groupId>com.github.maven-nar</groupId>
    <artifactId>nar-maven-plugin</artifactId>
    <version>3.0.0-SNAPSHOT</version>
</plugin>

It will resolve the plugin from your local cache.

Note that this approach is recommended only for testing, not for production code, because anyone else building your code will then also need to build nar-maven-plugin beforehand as well.