Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Added rating macro
Wiki Markup
{rate}
{toc}
h1. Install Eclipse & Plugins

h2. Eclipse Indigo 
Table of Contents

Install Eclipse & Plugins

...

(3.7)

...



{info
}As of 4th April 2012 *our SVN repository will be gradually migrated to GIT*. The new Eclipse bundle is based on latest (as of April 2012) Indigo and also contains [EGit plugin|http://www.eclipse.org/egit/], an Eclipse Team provider for the Git version control system. For any question concerning Eclipse and Git integration, please read the [EGit User guide
.
To know more about Git usage you can start by reading our wiki page
Note
There's a bug in Indigo (see also related issue http://jira.magnolia-cms.com/
|http://wiki.eclipse.org/EGit/User_Guide].
To know more about Git usage you can start by [reading our wiki page|http://wiki.magnolia-cms.com/display/DEV/Git+usage]
{info}
{note}There's a [bug in Indigo|https://bugs.eclipse.org/bugs/show_bug.cgi?id=350414] (see also related issue [http://jira.magnolia-cms.com/browse/BUILD-72]) which causes Eclipse to show an annoying error message on poms. Worry not, however, your IDE will work fine nonetheless. Read more below.

{note}If you can access Magnolia's internal network, a preinstalled eclipse for *Mac OS X(Cocoa 64)* called _eclipse-indigo-macosx-cocoa-64-egit.zip_ can be found at our [file server|SYS:fileserver.magnolia-cms.com] under _Product Development/Eclipse

...

_

There is also preinstalled eclipse for *Linux-64b*. It can also be found in Product Development/Eclipse folder. This version supports Git DVCS.

...



The _eclipse-indigo-macosx-cocoa-64-egit.zip_ bundle was created on 10 April 2012 and consists of the following platform, plugins and related

...

Image Removed

  • Autoshare

By default cloning a Git repo and then importing it as a Java or Maven project does not show it as "shared", meaning that the Eclipse project looks disconnected from your local Git repo. If you're used to work with SVN you might find this baffling, as you're accostumed to checkout a project from the central scm repository and see it connected to it, so that changes to your local copy are visually decorated by a special label or icon. In order to save you some clicks to achieve the same with Git you need to check the following option under Eclipse -> Preferences -> Team -> Git -> Projects

Image Removed

  • m2e 1.0 known issue

Indigo introduces m2e (Maven 2 Eclipse) 1.0, which seems to cause some problems with plugins that are not "known" by m2e. This hits Magnolia with the setproperty Maven plugin and other Maven plugins as well (See list below). If you have m2e 1.0 installed you will likely get the following error upon importing a Maven project (i.e. a Magnolia module) into Eclipse: 

Warning

No marketplace entries found to handle Execution currentDate, in /pom.xml in Eclipse.  Please see Help for more information.

Image Removed

Just choose to resolve the issue later and import the project.

  • Table of plugins which currently do not have a m2e connector

groupId

artifactId

version

goal

execution

phase

org.apache.maven.plugins

maven-javadoc-plugin

2.8

javadoc

default

generate-resources

info.magnolia

maven-setproperty-plugin

1.1.1

set-property

currentDate

generate-resources

org.codehaus.mojo

gwt-maven-plugin

2.4.0

resources

default

process-resources

(Last update April 2012)

Maven Repository

See Maven setup. Be sure to follow these steps first as else you'll not be able to checkout magnolia properly!

Add SVN Repository

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

...

 versions:

!indigo-installed-software.png!

* h3. Autoshare

By default cloning a Git repo and then importing it as a Java or Maven project does not show it as _"shared"_, meaning that the Eclipse project looks disconnected from your local Git repo. If you're used to work with SVN you might find this baffling, as you're accostumed to checkout a project from the central scm repository and see it connected to it, so that changes to your local copy are visually decorated by a special label or icon. In order to save you some clicks to achieve the same with Git you need to check the following option under {{Eclipse \-> Preferences \-> Team \-> Git \-> Projects}}

!autoshare-git-project.png!


* h3. m2e 1.0 known issue

Indigo introduces *m2e (Maven 2 Eclipse) 1.0*, which seems to cause some problems with plugins that are not "_known_" by m2e. This hits Magnolia with the *setproperty* Maven plugin and other Maven plugins as well (See list below). If you have m2e 1.0 installed you will likely get the following error upon importing a Maven project (i.e. a Magnolia module) into Eclipse: 

{warning}{*}No marketplace entries found to handle Execution currentDate, in /pom.xml in Eclipse.  Please see Help for more information.*
{warning} !maven-import-error.png|thumbnail!

Just choose to *resolve the issue later* and import the project.

* h3. Table of plugins which currently do not have a m2e connector

||groupId||artifactId||version||goal||execution||phase||
|org.apache.maven.plugins|maven-javadoc-plugin|2.8|javadoc|default|generate-resources|
|info.magnolia|maven-setproperty-plugin|1.1.1|set-property|currentDate|generate-resources|
|org.codehaus.mojo|gwt-maven-plugin|2.4.0|resources|default|process-resources|

(Last update April 2012)

h1. Maven Repository

See [dev:Maven setup]. Be sure to follow these steps first as else you'll not be able to checkout magnolia properly\!

h1. Add SVN Repository

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

# open SVN Repository Exploring Perspective
!Screen shot 2010-05-27 at 12.25.59.png|Thumbnail!
# add repository location
!Screen shot 2010-05-27 at 12.28.03.png|thumbnail!
# [http://svn.magnolia-cms.com/svn

...

]
!Screen shot 2010-05-27 at 12.27.12.png|thumbnail!

h1. Create/Checkout a Project

...



h2. New

...

Image Removed

...

 Checkout

!CheckoutAsMavenProject.jpg|thumbnail!
# open "SVN Repository" perspective (Window \-> Open perspective)
# select module/project to check out
# click "Check out as Maven project..." in the context menu

...



h2. 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.

...


# File \-> Import

...


# in the import dialog select 'Maven Projects'

...



h1. Setup the Server (Tomcat)

...



h3. Create a Server

...



If not yet done create a server

...

Image Removed

Deploy the Webapp project

Image Removed

Open Server Edit Pane

Doubleclick on the server item

Image Removed

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. 

Image Removed

Server settings: Increase timeouts

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

Freemarker specific settings

Taglib definitions (tld)

FreeMarker does not search the classpath to find taglib definition. It uses only WEB-INF/lib and the entries defined in web.xml directly. There are two workarounds:

A) Register taglib definitions in web.xml

...

.

!step5.png|thumbnail!

h3. Deploy the Webapp project

!step6.png|thumbnail!

h3. Open Server Edit Pane

Doubleclick on the server item

!step7.png|thumbnail!

h3. 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. 

!step8.png|thumbnail!

h3. Server settings: Increase timeouts

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

h1. Freemarker specific settings

h3. Taglib definitions (tld)

FreeMarker does not search the classpath to find taglib definition. It uses only {{WEB-INF/lib}} and the entries defined in {{web.xml}} directly. There are two workarounds:

A) Register taglib definitions in {{web.xml}}

# Edit {{web.xml}} and add the taglib definitions as follows. It is important to add them before {{jsp-property-group}}.
{code: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>

...


{code}
# Copy the files to {{webapp/WEB-INF}}.

...



B) Put minimal JARs into {{WEB-INF/lib

...

}}

# In the {{webapp}} folder, execute:
{code:none}  mvn war:inplace
{code}

...

This generates a complete webapp in your {{src/webapp}} directory as opposed to {{target/webapp-name-1.0-SNAPSHOT}}. This is an Eclipse specific workaround.

...


# Delete all JARs except the taglib JARs in {{src/main/webapp/WEB-INF/lib

...

}}
# Minimize the taglib JAR

...


{code

...

: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.

...


{code}

h3. 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|^freemarker-ide.xml] 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
: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: Coding Conventions.

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
nonenone

{code}
h1. Configure Code Style

If you are an internal developer or a contributor please follow the instructions found here: [Coding Conventions].

h1. Tips and Tricks

h3. Get the sources or a linked jar / module

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

h3. 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).

h1. Known Problems

h2. Wrong maven version is used for dependency checks

If the project can't build because of the following message (printed in Maven Console)
{code: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].
{code}
The expected stacktrace on startup is:

...


{code
: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)
{code}
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
:xml
xml
}<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <configuration>
    <skip>true</skip>
  </configuration>
</plugin>
{code}
Then clean all projects

...



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

...

 exists.

h2. Freemarker can't find tags (tlds)

...



See

...

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

...

 [#Freemarkerspecificsettings]

h2. 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

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

...



Symptom:

...



{code
: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)
{code}
Solution: exclude the servlet api jar. Verify that you don't have the servlet api jar in your maven dependencies.

...



Example:

...


{code
: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>

...


{code}
h2. Webapp project doesn't work

...



# make sure that you have only one webapp project open

...


# add the pom dependency (not only the war dependency) otherwise the dependencies defined in the referenced war file won't be seen

...


# use mvn war:inplace to overlay the webapp project (make sure that the WEB-INF/web.xml exists

...


# ensure that you delete WEB-INF/lib after a war:inplace

...


# check settings {{project/project facets/dynamic web module}} ==> 2.4 works (helios, wtp 2.4), 3.0 doesn't (helios, wtp 3.0)

...



h2. NPE when configuring tomcat with "don't publish" option

...



# delete Servers, delete .project and .settings from the webapp and reimport the webapp

...



h2. webapp is not recognized as webapp and doesn't show in tomcat when trying to add it

...



# go to {{project/project facets}} and make sure {{dynamic web module}} and {{java}} and {{javascript}} facets are

...

modules are not installed when installing the webapp

  1. cause: modules are not visible if the faceted build version of java doesn't match the current version or that used by the webapp project
  2. solution: update project config and change java version

Module Dependency Exception

Symptom:

Code Block
nonenone
 checked.
# rebuild the project

h2. modules are not installed when installing the webapp

# cause: modules are not visible if the faceted build version of java doesn't match the current version or that used by the webapp project
# solution: update project config and change java version

h2. Module Dependency Exception

Symptom:

{code:none}ERROR info.magnolia.init.MagnoliaServletContextListener : Oops, Magnolia could not be started
info.magnolia.module.model.reader.ModuleDependencyException: Module Magnolia Mail Module (version 4.5.0-SNAPSHOT) is dependent on myCoolModule version 4.5/*, which was not found.
   at info.magnolia.module.model.reader.DependencyCheckerImpl.checkSpecificDependency(DependencyCheckerImpl.java:79)
{code}
Solution: ensure that no resource is excluded under myCoolModule \-> Build path \-> Configure Build Path... This might happen when i.e. updating the Maven dependencies if the m2Eclipse plugin is installed.

h2.

...

 Trouble shooting step

...

  • are the parent poms available?

...

  • 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)

...

 by step

# check if there are any build issues denoted in the problem view
# check if there are any problems denoted in the pom.xml (missing parents, ..)
# check if the project builds in the terminal (by using mvn only)
#* are the parent poms available?
# 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)
# 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

...

}}
# update project configuration

...


#* right click project \-> maven \-> update project configuration

...


#* check the maven console (some errors are not reported to the GUI)

...


#* one last step can be added to the above Eclipse voodoo dance: ensure that no resource is excluded under

...



h2. Install Sun JDK to Ubuntu

...



By default Ubuntu packagers are not supporting sun jdk. You have to add new software source:

...


{code
}
deb http://ppa.launchpad.net/ferramroberto/java/ubuntu oneiric main
{code}