Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Install Eclipse & Plugins

If you're at the Magnolia premises, a preinstalled eclipse for Mac OS X(Cocoa 64) called eclipse-helios-macosx-cocoa-64.zip can be found at our file server under Product Development/Eclipse

The eclipse-helios-macosx-cocoa-64.zip bundle was created on 12 January 2011 and consists of the following platform, plugins and related versions (where available):

Name

Version

Notes

Eclipse Platform

3.6.1.r361_v20100909-9gF78GrkFqw7GrsZnvz0JWNTeb6fue6896L

Helios

AnyEditTools

2.3.4.201012191830

 

CollabNet Merge

Client 2.2.1

 

Eclipse Checkstyle Plug-in

5.3.0.201012121300

 

Eclipse IDE for Java EE Developers

1.3.1.20100916-1202

 

FreeMarker IDE

1.1.0.v20101206-2100-H28-Beta2

no stable release for Helios here

Google Plugin for Eclipse 3.6

1.4.2.v201012211742

needed by Freemarker IDE

Google Web Toolkit SDK 2.0.4

2.0.4.v201006301309

 

JNA Library

3.2.7

 

Maven Integration for Eclipse (Required)

0.12.0.20101115-1102

 

Maven Integration for WTP (Optional)

0.11.1.20101108-1810

 

Maven SCM handler for Subclipse

0.12.0.20101207-1600

Allows to checkout a maven project into the workspace by right-clicking on a jar dependency

Memory Analyzer

1.0.1.201008091353

 

Memory Analyzer (Charts) (optional)

 

 

Subclipse (Required)

1.6.16

 

Subclipse Integration for Mylyn 3.x (Optional)

3.0.0

 

Subversion Client Adapter (Required)

 

 

Subversion JavaHL Native Library Adapter (Required)

 

 

Subversion Revision Graph

1.0.9

 

SVNKit Client Adapter (Not required)

1.6.12

 

SVNKit Library

1.3.4.6888

 

Vaadin Eclipse Integration

1.3.1.201012171040

 

Vaadin Visual Editor (EXPERIMENTAL)

0.6.0.201012080843

 

Install Eclipse (3.5)

Download the Java EE edition which includes WTP (web tool project).

Subversive (Subversion Plugin)

Install the plugin

  1. Help / Install New Software ..
  2. select: Galileo - http://download.eclipse.org/releases/galileo
  3. select: Collaboration/Subversive SVN Team Provider

Note: to get the latest stable version you will better use the project's url. I had to do that because eclipse started to block on startups otherwise.

Note: There seems to be a version conflict with Subversive.  If you look at the table showing the content of the eclipse-helios-macosx-cocoa-64.zip bundle (in a preceding section, above) you will notice that it includes Subclipse, not Subversive.  If you have problems with Subversive you might try Subclipse instead.  http://subclipse.tigris.org/update_1.6.x

Connectors
You also have to install a connector. Subversive will prompt you on the first usage.

  1. open "SVN Repository" perspective (Window -> Open perspective)
  2. select SVNKit 1.3
  3. proceed installation

Maven integration (M2Eclipse)

Plugin

  1. Help -> Install New Software ..
  2. Add... (to add a new site)
  3. http://m2eclipse.sonatype.org/sites/m2e

WTP Integration

  1. Help -> Install New Software ..
  2. Add... (to add a new site)
  3. http://m2eclipse.sonatype.org/sites/m2e-extras
  4. select: Maven Integration for WTP

Subversive Integration

  1. Help -> Install New Software ..
  2. Add... (to add a new site)
  3. http://www.polarion.org/projects/subversive/download/integrations/update-site/
  4. select: Subversive Integration for M2Eclipse

FreeMarker IDE (optional)

Register the following URLs in Help / Software Updates

  1. http://download.jboss.org/jbosstools/updates/JBossTools-3.0.3.GA
  2. select: FreeMarker IDE

Any Edit (optional)

Used for tab to space transformations and other cleanup on save

  1. http://andrei.gmxhome.de/eclipse
  2. select: AnyEditTools

JIRA integration (optional)

  • Check Mylyn Extras and select JIRA integration

Maven Repository

See Maven setup.

Add SVN Repository

You will have to register our SVN repository in case you want to checkout magnolia modules/projects

  1. open SVN Repository Exploring Perspective
  2. add repository location
  3. http://svn.magnolia-cms.com/svn

Create/Checkout a Project

New Checkout

  1. open "SVN Repository" perspective (Window -> Open perspective)
  2. select module/project to check out
  3. click "Check out" in the context menu

Importing an already checked out project from file system

Sometimes it is more convenient to checkout a project manually and then use the eclipse import function. This is especially helpful if the module to be imported has submodules.

  1. File -> Import
  2. in the import dialog select 'Maven Projects'

Setup the Server (Tomcat)

Create a Server

If not yet done create a server.

Deploy the Webapp project

Open Server Edit Pane

Doubleclick on the server item

Server settings: Disable publishing

Make sure that the option Serve modules without publishing is selected. This ensures that the classes are taken from the target directories. 

Server settings: Increase timeouts

In these same settings, increase both timeout values by a factor of 10.

Freemarker specific settings

tld's

FreeMarker won't search the classpath for finding the tlds but uses only WEB-INF/lib and the entries defined in web.xml directly. There exist mainly the following two workarounds:

A) register the tlds in web.xml

Edit web.xml and add the taglib definitions as follows. Note it is important to adde them before jsp-property-group

Code Block
xml
xml
<jsp-config>
   <taglib>
     <taglib-uri>cms-taglib</taglib-uri>
     <taglib-location>cms-taglib.tld</taglib-location>
   </taglib>
   <taglib>
     <taglib-uri>cms-util-taglib</taglib-uri>
     <taglib-location>cms-util-taglib.tld</taglib-location>
   </taglib>
   <taglib>
      <taglib-uri>cmsfn-taglib</taglib-uri>
      <taglib-location>cmsfn-taglib.tld</taglib-location>
    </taglib>

    <jsp-property-group>
      <url-pattern>*.jsp</url-pattern>
      <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

And copy the files to webapp/WEB-INF

B) put minimal jars into WEB-INF/lib

1. in the webapp folder execute:

Code Block
none
none
  mvn war:inplace

2. delete all jars except the taglib jars in src/main/webapp/WEB-INF/lib

3. minimize the taglib jar

Code Block
none
none
 zip -d magnolia-taglib-cms-4.1.1-SNAPSHOT.jar /info/*
 zip -d magnolia-taglib-utility-4.1.1-SNAPSHOT.jar /info/*

Auto completion

Freemarker templates do not provide automatically auto completion of the provided objects.

The provided objects like ctx, stk or mgnl must be declared to the IDE, that they can be auto completed.

There for a configuration file must be provided in each project in your workspace. The file is named '.freemarker-ide.xml'. I have attached it to this page without the dot at the beginning, or I can't upload it on the Mac otherwise (hidden).

The important part of this configuration file is the declaration of the objects the auto completion should know. I think these four declarations I use make sense:

Code Block
xml
xml
<value key="mgnl" object-class="info.magnolia.module.templating.MagnoliaTemplatingUtilities"/>
<value key="ctx" object-class="info.magnolia.context.MgnlContext"/>
<value key="stk" object-class="info.magnolia.module.templatingkit.util.STKUtil"/>
<value key="state" object-class="info.magnolia.cms.core.AggregationState"/>

Configure Code Style

If you are an internal developer or a contributor please follow the instructions found here: Code style and Javadoc.

Tips and Tricks

Get the sources or a linked jar / module

  • select the jar (in the Maven Dependencies library)
  • right click -> Maven -> Download Sources

Dependencies

The dependencies are resolved inside the workspace. This is quite helpful. But this will only work if the version you reference in the project and the version of the module you checked out has the same version. In some cases you will have to adapt the pom files locally (to point to the current snapshot for instance).

Known Problems

Wrong maven version is used for dependency checks

If the project can't build because of the following message (printed in Maven Console)

Code Block
none
none
[WARN] Rule 0: org.apache.maven.plugin.enforcer.RequireMavenVersion failed with message: Detected Maven Version: 2.1-SNAPSHOT is not in the allowed range [2.0.9,2.0.9].

The expected stacktrace on startup is:

Code Block
none
none
SEVERE: Exception sending context initialized event to listener instance of class info.magnolia.cms.servlets.MgnlServletContextListener
java.lang.NullPointerException
	at info.magnolia.cms.beans.config.PropertiesInitializer.loadAllModuleProperties(PropertiesInitializer.java:92)
	at info.magnolia.cms.beans.config.PropertiesInitializer.loadAllProperties(PropertiesInitializer.java:79)
	at info.magnolia.cms.servlets.MgnlServletContextListener.contextInitialized(MgnlServletContextListener.java:176)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)

You can either add the following to the pluginManagement section in your main project pom to disable the enforcer plugin or select the eclipse profile:

Code Block
xml
xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <configuration>
    <skip>true</skip>
  </configuration>
</plugin>

Then clean all projects

To ensure that everything is fine you have to check that magnolia-core/target/classes/mgnl-bean.properties exists.

Freemarker can't find tags (tlds)

See #Freemarkerspecificsettings

Project contains duplicate entry

Sometimes the same jar is references twice (by maven and EAR dependencies). This sometimes happens if you open eclipse freshly. To make the project compile again you must remove the ear dependency:

  • right click project -> Java EE -> Update EAR libraries

Class Cast Exception: info.magnolia.cms.filters.MgnlMainFilter

Symptom:

Code Block
none
none
SEVERE: Exception starting filter magnoliaFilterChain
java.lang.ClassCastException: info.magnolia.cms.filters.MgnlMainFilter
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:255)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

Solution: exclude the servlet api jar. Verify that you don't have the servlet api jar in your maven dependencies.

Example:

Code Block
xml
xml
<dependency>
	<groupId>info.magnolia</groupId>
	<artifactId>magnolia-empty-webapp</artifactId>
	<version>4.0.1</version>
	<type>pom</type>
	<exclusions>
		<exclusion>
		        <groupId>javax.servlet</groupId>
		        <artifactId>servlet-api</artifactId>
		</exclusion>
	</exclusions>
</dependency>

Webapp project doesn't work

  1. make sure that you have only one webapp project open
  2. add the pom dependency (not only the war dependency) otherwise the dependencies defined in the referenced war file won't be seen
  3. use mvn war:inplace to overlay the webapp project (make sure that the WEB-INF/web.xml exists
  4. ensure that you delete WEB-INF/lib after a war:inplace

Trouble shooting step by step

  1. check if there are any build issues denoted in the problem view
  2. check if there are any problems denoted in the pom.xml (missing parents, ..)
  3. check if the project builds in the terminal (by using mvn only)
    • are the parent poms available?
  4. check the maven log in eclipse (select the maven console in the console view)
    • are the logs fine?
    • verify that there is no version conflict thrown by the enforcer plugin
      • if so configure the project to use the eclipse profile in the project settings (maven tab)
  5. clean the project
    • this ensures that maven is used to build the resources
    • verify that the resources have been built (module descriptor in target/classes/META-INF/magnolia
  6. update project configuration
    • right click project -> maven -> update project configuration
    • check the maven console (some errors are not reported to the GUI)