This page provides a quick overview of module development for experienced Magnolia developers. An overview of Magnolia modules can be found at in our documentation on the Modules page.
Using a Maven Archetype
You can use Maven 2's archetype plugin to quickly get started with creating a module or project.
Use this command:
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -DarchetypeCatalog=https://nexus.magnolia-cms.com/content/groups/public/
You will first be prompted to "Choose an archetype".
You will further be prompted for various properties, whose names should hopefully be obvious enough for you to figure what to enter. If not, try some random value, see the results and try again (Please vote for this maven-archetype-plugin enhancement !)
Module archetype
The module archetype will generate a basic Magnolia module, including all necessary folders, a module descriptor and two classes:
- a module configuration class, named after the
module-class-name
property. See http://documentation.magnolia-cms.com/technical-guide/modules.html#Module_class for details. - a module version handler class, similarly named, in the
.setup
subpackage. See http://documentation.magnolia-cms.com/technical-guide/modules.html#Version_handling for details.
Forge Module archetype
The Forge Module archetype is deprecated.
Please follow these improved tips to create a Forge module: Magnolia Forge#Mavenbuild
STK Theme archetype
The STK Theme archetype will produce a quickstart for an STK Theme (see also the part on themes in STK changes in 5.4).
Project archetype
The Project archetype will produce a skeleton for a "project"; this will contain
- a parent pom
- a webapp, overlaying
magnolia-empty-webapp
, ready to host your custom configuration files.
If you want to add a module to an existing project, generating the module
artifact from within your project should get you started quickly, as it will adapt the new artifact's parent pom to match your existing project !
Changing a project from CE to EE
When you create a project using an archetype from the public
group you get a Community Edition (CE) project. This means the project has dependencies to the CE bundle and you get only community modules. If you need a more substantial starting point, change the dependencies in your POM files to the Enterprise Edition (EE) bundle and webapp. This way you get enterprise modules such as Multisite and Workflow.
There are two videos in Magnolia Academy that explain how to work with Module Dependencies.
In your project POM, set:
- groupId:
info.magnolia.eebundle
- artifactId:
magnolia-enterprise-bundle-parent
Change this:
<dependency> <groupId>info.magnolia.bundle</groupId> <artifactId>magnolia-bundle-parent</artifactId> <version>${magnoliaVersion}</version> <type>pom</type> <scope>import</scope> </dependency>
To this:
<dependency> <groupId>info.magnolia.eebundle</groupId> <artifactId>magnolia-enterprise-bundle-parent</artifactId> <version>${magnoliaVersion}</version> <type>pom</type> <scope>import</scope> </dependency>
In your webapp POM, set:
- groupId:
info.magnolia.eebundle
- artifactId:
magnolia-enterprise-webapp
Change this:
<dependency> <groupId>info.magnolia</groupId> <artifactId>magnolia-empty-webapp</artifactId> <type>pom</type> </dependency> <dependency> <groupId>info.magnolia</groupId> <artifactId>magnolia-empty-webapp</artifactId> <type>war</type> </dependency>
To this:
<dependency> <groupId>info.magnolia.eebundle</groupId> <artifactId>magnolia-enterprise-webapp</artifactId> <type>pom</type> </dependency> <dependency> <groupId>info.magnolia.eebundle</groupId> <artifactId>magnolia-enterprise-webapp</artifactId> <type>war</type> </dependency>
Setting the File Encoding
If you see a warning about file encoding:
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
See https://maven.apache.org/general.html#encoding-warning for instructions.
Contribute
Have a look at http://jira.magnolia-cms.com/browse/ARCH to see known problems or suggest new features.
Please try it out and tell us what you think !
More info about Maven archetypes:
- http://maven.apache.org/guides/introduction/introduction-to-archetypes.html
http://maven.apache.org/guides/mini/guide-creating-archetypes.html
Host your module at the Forge!
Hey, why not share your new module with the world and host it at the forge?
9 Comments
Giancarlo Berner
Is there already an Archetype for Modules in Magnolia 4.01 or 4.1?
Magnolia International
Sorry for the late reply, but yes, finally !
)
(you can even choose the Magnolia version when generating
Jozef Chocholacek
If you occur an
error when running
on your newly created module, here is the solution http://forums.atlassian.com/thread.jspa?threadID=34952&tstart=30.
Matt Dertinger
Way cool beans!
Love the new archetypes! Thank you Joerg and Greg!
In case anyone is interested, you may also add the archetypes to your local archetype-catalog as an alternative to passing in the
-DarchetypeCatalog=http://nexus.magnolia-cms.com/content/groups/public/
argument.To do so:
~/.m2
check to see if you already have anarchetype-catalog.xml
file. If not, create one.archetype-catalog.xml
, and add the magnolia archetypes you'd like to use, for instance:Magnolia International
True, but that'd mean maintaining that list (new archetypes, new versions, ...) - whereas our catalog is always up-to-date. (generated by Nexus).
joshua portway
In case it will be of help to anyone else - there are currently a couple of severe bugs in the magnolia 5 maven project archetype which will cause a lot of frustration for anyone trying to create a new project.
the first problem is that the project pom omits a dependency of the Vaadin repository. As a result if you create a project from the archetype and attempt to build it the build will fail with an error like this :
The solution is to to add this to the repositories section of the project POM :
The other problem is that Maven will complain about a missing version number for the maven-war-plugin - I'm not sure whether this has any real effect on the build, but it causes a warning to be issued for every build, like this :
To sort this out, just add a version number property to the maven war plugin reference in the pom file within the web app sub folder like this :
Hopefully, when these problems are sorted out an admin can delete this comment....
Magnolia International
Joshua,
Thanks for this - we track issues with the archetypes on Jira: ARCH
The first problem is well known and should already be in there. Just got no time so far to fix it. (In part because it won't be necessary to have that fix everywhere, and in part because I've been wondering why Vaadin add-ons are not mirrored on Maven Central)
The second problem is probably specific to Maven 3, we still use Maven 2.2, which is why we haven't seen it yet. However you're right, and it's generally good practice to add plugin version numbers in any case. It's the type of thing that people will configured via their "corporate" parent pom, though.
Espen Jervidalo
There's a dependency problem related to Admin Interface Legacy Module (version 5.0.2) using Version 1.1 of the archetype together with Magnolia 5. Use the latest 1.2-SNAPSHOT to get it running properly. The final version 1.2 is going to be released soon.
Pete Ryland
Please note that https must be used to access nexus now.