Loading DOCS.txtdeleted 100644 → 0 +0 −252 Original line number Diff line number Diff line This document needs updating... ********************************** Disclaimer for maven-alfresco list ********************************** This codebase is currently work in progress; the effort have been split in three directions: a) The definition of 2 POM files that can handle versions and common build behaviors/features b) The writing of an alfresco-maven-plugin to enable amp-to-war overlay provided by Alfresco Repository built-in features (ModuleManagementTool) and replace the maven-amp-plugin (big rewriting of the maven-war-plugin) c) The definition of (initially 2) archetypes that show some simple project's configuration using the parent POMs Most of the build features have been successfully ported to a new structure, whose main advantage is to keep pom.xml files extremely simple and readable (since a lot of logic have been moved to the parent). Inherited behaviours are configurable simply defining specific properties in the project's or module's pom.xml (see documentation below). Here follows a list of build features that have not been ported yet: - Maven SCM and release - JBoss run - Tomcat remote deployment - Jetty Java source and resources reloading (Jetty currently runs .war files) - Maven Site generation - Maven reporting - Maven distributionManagement Apart from SCM and release, all the mentioned features are probably best suited for a more enterprise archetype, using the Alfresco Web Integration POM as parent and adding more build features around Maven, Tomcat and JBoss. ****************** Alfresco Maven SDK ****************** The Maven SDK is an effort that have been developing in the last 5 years - mostly driven by community efforts on Google Code (http://code.google.com/p/maven-alfresco-archetypes) - which delivers archetypes for building Alfresco integration project with Maven; builds are based on artifacts that are deployed into maven.alfresco.com Repository manually as a community effort. The main advantages with the (currently official) Alfresco SDK follows: - IDE-independent SDK, use IntelliJ, eMacs or any other IDE sto write your code - No IDE manual configuration, all build-related features are provided by Apache Maven, which is the only prerequisite to use this SDK - Language independent, you don't like Maven? You can still use Ant, Ivy, Buildr, Gradle, Leiningen or any other build system that is compatible with Maven artifact resolution mechanism; just configure maven.alfresco.com as (one of) your Maven repositories and you're ready to go - Javadoc and Sources support, provided by maven.alfresco.com related Maven artifacts; you don't need to manually configure your IDE to attach (manually downloaded) sources to your (manually downloaded) binaries. - Clean and readable, the build logic related with OOTB Alfresco features is wrapped in 50 lines of pom.xml - Advanced build functionality, inherited by your parent POMs you can use embedded databases and j2ee containers with (almost) no configuration at all, among other features exposed below. - One mvn command to generate, one mvn command to run, this is all you need to do to have a local Alfresco running on an empty laptop - Supports community and enterprise flawlessly, allowing to switch one to another very easily The following documentation aims to provide three different levels of complexity to tackle an Alfresco integration project: simple, advanced and custom; the latter exposes in details the Maven Alfresco SDK features. ************* Prerequisites ************* The main and only prerequisite to follow reading this document is to have Apache Maven 3.0.3 (or higher) installed on your machine; there is no preferred IDE nor web container and database requirements needed. It is strongly advised to use the Apache Maven official binary distributions downloaded from maven.apache.org; avoid OS-specific distributions as much as possible. ************ Use - Simple ************ If you're new to Alfresco, you probably want to know which is the impact of introducing such a technology within your development team, run it locally, assess all development processes involved with the product and which technologies/tools are best suited for those. You can currently choose between two different flavors, depending on your final goal: * If you want to assess efforts involved with AMP development, you can run the following commands: 1. mvn archetype:generate \ -DarchetypeGroupId=org.alfresco.maven \ -DarchetypeArtifactId=quickstart-amp-archetype \ -DarchetypeVersion=1.0 \ -DgroupId=com.someco \ -DartifactId=alfresco-amp-quickstart \ -Dversion=1.0-SNAPSHOT \ -DarchetypeRepository=http://maven.alfresco.com/nexus/content/repositories/releases \ -DinteractiveMode=false You can always switch Alfresco versions/editions by editing the <parent> coordinates of your generated pom.xml 2. cd alfresco-amp-quickstart && MAVEN_OPTS="-Xms256m -Xmx1G -XX:PermSize=300m" mvn package -Drunamp Browse to http://localhost:8080/amp-quickstart and you will find Alfresco Explorer Client running against a local Alfresco Repository sitting on top of an H2 embedded database and loading your AMP package. * If you want to customise Alfresco Explorer and/or Share clients, embed AMP packages/projects or simply run both Alfresco Explorer and Share on the same machine, run the following commands: 1. mvn archetype:generate \ -DarchetypeGroupId=org.alfresco.maven \ -DarchetypeArtifactId=quickstart-allinone-archetype \ -DarchetypeVersion=1.0 \ -DgroupId=com.someco \ -DartifactId=alfresco-allinone-quickstart \ -Dversion=1.0-SNAPSHOT \ -Dedition=community \ -DarchetypeRepository=http://maven.alfresco.com/nexus/content/repositories/releases \ -DinteractiveMode=false 2. cd alfresco-allinone-quickstart && MAVEN_OPTS="-Xms256m -Xmx1G -XX:PermSize=300m" mvn package -Drun Compared with the previous flavor, alfresco-allinone-quickstart is a Maven multi-module project, which also includes an AMP project that gets 'overlaid' into both Alfresco and Share web applications. Alfresco Explorer is available at http://localhost:8080/alfresco whereas Alfresco Share is available at http://localhost:8080/share ************ Use - Custom ************ When the build logic becomes tough, integrating with third party technologies, introducing complex build scenarios, you might want to have a lower integration level with Alfresco SDK; there are basically 2 big integration points you can rely on, which are basically Alfresco-maintained POM files that provide: - A list of Alfresco artifacts, including binaries, javadoc and sources, Maven plugins successfully tested against the standard and supported build process; artifacts come with correct platform versions and editions (community vs enterprise) according with the <groupId> and <version> tags parent coordinates. You can simply define the following parent POM in your project's pom.xml: <parent> <groupId>org.alfresco.enterprise</groupId> <artifactId>alfresco-platform-parent</artifactId> <version>4.0.1</version> </parent> In Maven geek terms, this parent POM will define <dependencyManagement>, <pluginManagement> and <properties> elements related with Alfresco-produced artifacts. The main goal of this approach is to give you full access to Alfresco artifacts without needing to handle dependency and plugin management inside your pom.xml. Please note that Alfresco artifacts are not shipped with POM files at the moment, therefore transitive dependencies are not handled; you will need to define them explicitly in your pom.xml (using <scope>provided</scope> - A set of useful build features around Alfresco web integrations, which are also inherited by alfresco-platform-parent; if you want to use it directly and skip alfresco-platform-parent, you can define: <parent> <groupId>org.alfresco.enterprise</groupId> <artifactId>alfresco-developer-parent</artifactId> <version>1</version> </parent> In this case you will have to re-define a list of properties to set your dependency versions: <alfresco.version>4.0.1</alfresco.version> <spring.version>3.0.5.RELEASE</spring.version> <h2.version>1.3.158</h2.version> <h2-support.version>1.2</h2-support.version> <servlet.api.version>2.5</servlet.api.version> <faces.version>1.1_02</faces.version> <digester.version>1.6</digester.version> <log4j.version>1.2.15</log4j.version> Besides the alfresco-integration-parent items inherited, this parent POM provides 3 commonly used features that can be easily enabled/disabled/configured: * AMP overlay into an Alfresco (or Share) Extension --- Activation: built-in --- When your project (or sub-module) is a <packaging>war</packaging>, you can automatically include one or more AMP files by defining the dependencies into the pom.xml, as follows: <dependency> <groupId>com.mycompany</groupId> <artifactId>amp-module</artifactId> <version>1.0-SNAPSHOT</version> <type>amp</type> </dependency> The AMP files will be overlayed on top of your current WAR customizations, therefore they can override the content of the original WAR. -- oOo -- * Multi-environment property filtering --- Activation: exists src/main/properties --- You can enable multi-environment property filtering by simply creating the src/main/properties/${env}/${webapp.resource.filter} file with your property values; all files included in src/main/resources and src/main/properties will be filtered with your properties defined; in order to switch between environments, simply attach -Denv=yourenv to your mvn commands. --- Properties --- <env>local</env> <webapp.resource.filter>alfresco-global.properties</webapp.resource.filter> <webapp.resource.build.folder>${project.build.outputDirectory}</webapp.resource.build.folder> <webapp.name>${project.artifactId}</webapp.name> -- oOo -- * Jetty H2 configuration --- Activation: exists jetty/jetty.xml --- You can enable Jetty to run your application(s); by default Jetty will run all contexts using jetty/jetty.xml as Jetty Server configuration, allowing to add the jndi resource needed to start Alfresco Repository webapp; if you want to run multiple webapps - for example share and alfresco - follow the example listed below: <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <executions> <execution> <id>run</id> <goals><goal>run</goal></goals> <phase>package</phase> <configuration> <contextPath>/</contextPath> <webAppSourceDirectory>.</webAppSourceDirectory> <webXml>jetty/root-web.xml</webXml> <contextHandlers> <contextHandler implementation="org.mortbay.jetty.webapp.WebAppContext"> <war>${project.basedir}/../alfresco/target/alfresco.war</war> <contextPath>/alfresco</contextPath> </contextHandler> <contextHandler implementation="org.mortbay.jetty.webapp.WebAppContext"> <war>${project.basedir}/../share/target/share.war</war> <contextPath>/share</contextPath> </contextHandler> </contextHandlers> </configuration> </execution> </executions> </plugin> No newline at end of file Loading
DOCS.txtdeleted 100644 → 0 +0 −252 Original line number Diff line number Diff line This document needs updating... ********************************** Disclaimer for maven-alfresco list ********************************** This codebase is currently work in progress; the effort have been split in three directions: a) The definition of 2 POM files that can handle versions and common build behaviors/features b) The writing of an alfresco-maven-plugin to enable amp-to-war overlay provided by Alfresco Repository built-in features (ModuleManagementTool) and replace the maven-amp-plugin (big rewriting of the maven-war-plugin) c) The definition of (initially 2) archetypes that show some simple project's configuration using the parent POMs Most of the build features have been successfully ported to a new structure, whose main advantage is to keep pom.xml files extremely simple and readable (since a lot of logic have been moved to the parent). Inherited behaviours are configurable simply defining specific properties in the project's or module's pom.xml (see documentation below). Here follows a list of build features that have not been ported yet: - Maven SCM and release - JBoss run - Tomcat remote deployment - Jetty Java source and resources reloading (Jetty currently runs .war files) - Maven Site generation - Maven reporting - Maven distributionManagement Apart from SCM and release, all the mentioned features are probably best suited for a more enterprise archetype, using the Alfresco Web Integration POM as parent and adding more build features around Maven, Tomcat and JBoss. ****************** Alfresco Maven SDK ****************** The Maven SDK is an effort that have been developing in the last 5 years - mostly driven by community efforts on Google Code (http://code.google.com/p/maven-alfresco-archetypes) - which delivers archetypes for building Alfresco integration project with Maven; builds are based on artifacts that are deployed into maven.alfresco.com Repository manually as a community effort. The main advantages with the (currently official) Alfresco SDK follows: - IDE-independent SDK, use IntelliJ, eMacs or any other IDE sto write your code - No IDE manual configuration, all build-related features are provided by Apache Maven, which is the only prerequisite to use this SDK - Language independent, you don't like Maven? You can still use Ant, Ivy, Buildr, Gradle, Leiningen or any other build system that is compatible with Maven artifact resolution mechanism; just configure maven.alfresco.com as (one of) your Maven repositories and you're ready to go - Javadoc and Sources support, provided by maven.alfresco.com related Maven artifacts; you don't need to manually configure your IDE to attach (manually downloaded) sources to your (manually downloaded) binaries. - Clean and readable, the build logic related with OOTB Alfresco features is wrapped in 50 lines of pom.xml - Advanced build functionality, inherited by your parent POMs you can use embedded databases and j2ee containers with (almost) no configuration at all, among other features exposed below. - One mvn command to generate, one mvn command to run, this is all you need to do to have a local Alfresco running on an empty laptop - Supports community and enterprise flawlessly, allowing to switch one to another very easily The following documentation aims to provide three different levels of complexity to tackle an Alfresco integration project: simple, advanced and custom; the latter exposes in details the Maven Alfresco SDK features. ************* Prerequisites ************* The main and only prerequisite to follow reading this document is to have Apache Maven 3.0.3 (or higher) installed on your machine; there is no preferred IDE nor web container and database requirements needed. It is strongly advised to use the Apache Maven official binary distributions downloaded from maven.apache.org; avoid OS-specific distributions as much as possible. ************ Use - Simple ************ If you're new to Alfresco, you probably want to know which is the impact of introducing such a technology within your development team, run it locally, assess all development processes involved with the product and which technologies/tools are best suited for those. You can currently choose between two different flavors, depending on your final goal: * If you want to assess efforts involved with AMP development, you can run the following commands: 1. mvn archetype:generate \ -DarchetypeGroupId=org.alfresco.maven \ -DarchetypeArtifactId=quickstart-amp-archetype \ -DarchetypeVersion=1.0 \ -DgroupId=com.someco \ -DartifactId=alfresco-amp-quickstart \ -Dversion=1.0-SNAPSHOT \ -DarchetypeRepository=http://maven.alfresco.com/nexus/content/repositories/releases \ -DinteractiveMode=false You can always switch Alfresco versions/editions by editing the <parent> coordinates of your generated pom.xml 2. cd alfresco-amp-quickstart && MAVEN_OPTS="-Xms256m -Xmx1G -XX:PermSize=300m" mvn package -Drunamp Browse to http://localhost:8080/amp-quickstart and you will find Alfresco Explorer Client running against a local Alfresco Repository sitting on top of an H2 embedded database and loading your AMP package. * If you want to customise Alfresco Explorer and/or Share clients, embed AMP packages/projects or simply run both Alfresco Explorer and Share on the same machine, run the following commands: 1. mvn archetype:generate \ -DarchetypeGroupId=org.alfresco.maven \ -DarchetypeArtifactId=quickstart-allinone-archetype \ -DarchetypeVersion=1.0 \ -DgroupId=com.someco \ -DartifactId=alfresco-allinone-quickstart \ -Dversion=1.0-SNAPSHOT \ -Dedition=community \ -DarchetypeRepository=http://maven.alfresco.com/nexus/content/repositories/releases \ -DinteractiveMode=false 2. cd alfresco-allinone-quickstart && MAVEN_OPTS="-Xms256m -Xmx1G -XX:PermSize=300m" mvn package -Drun Compared with the previous flavor, alfresco-allinone-quickstart is a Maven multi-module project, which also includes an AMP project that gets 'overlaid' into both Alfresco and Share web applications. Alfresco Explorer is available at http://localhost:8080/alfresco whereas Alfresco Share is available at http://localhost:8080/share ************ Use - Custom ************ When the build logic becomes tough, integrating with third party technologies, introducing complex build scenarios, you might want to have a lower integration level with Alfresco SDK; there are basically 2 big integration points you can rely on, which are basically Alfresco-maintained POM files that provide: - A list of Alfresco artifacts, including binaries, javadoc and sources, Maven plugins successfully tested against the standard and supported build process; artifacts come with correct platform versions and editions (community vs enterprise) according with the <groupId> and <version> tags parent coordinates. You can simply define the following parent POM in your project's pom.xml: <parent> <groupId>org.alfresco.enterprise</groupId> <artifactId>alfresco-platform-parent</artifactId> <version>4.0.1</version> </parent> In Maven geek terms, this parent POM will define <dependencyManagement>, <pluginManagement> and <properties> elements related with Alfresco-produced artifacts. The main goal of this approach is to give you full access to Alfresco artifacts without needing to handle dependency and plugin management inside your pom.xml. Please note that Alfresco artifacts are not shipped with POM files at the moment, therefore transitive dependencies are not handled; you will need to define them explicitly in your pom.xml (using <scope>provided</scope> - A set of useful build features around Alfresco web integrations, which are also inherited by alfresco-platform-parent; if you want to use it directly and skip alfresco-platform-parent, you can define: <parent> <groupId>org.alfresco.enterprise</groupId> <artifactId>alfresco-developer-parent</artifactId> <version>1</version> </parent> In this case you will have to re-define a list of properties to set your dependency versions: <alfresco.version>4.0.1</alfresco.version> <spring.version>3.0.5.RELEASE</spring.version> <h2.version>1.3.158</h2.version> <h2-support.version>1.2</h2-support.version> <servlet.api.version>2.5</servlet.api.version> <faces.version>1.1_02</faces.version> <digester.version>1.6</digester.version> <log4j.version>1.2.15</log4j.version> Besides the alfresco-integration-parent items inherited, this parent POM provides 3 commonly used features that can be easily enabled/disabled/configured: * AMP overlay into an Alfresco (or Share) Extension --- Activation: built-in --- When your project (or sub-module) is a <packaging>war</packaging>, you can automatically include one or more AMP files by defining the dependencies into the pom.xml, as follows: <dependency> <groupId>com.mycompany</groupId> <artifactId>amp-module</artifactId> <version>1.0-SNAPSHOT</version> <type>amp</type> </dependency> The AMP files will be overlayed on top of your current WAR customizations, therefore they can override the content of the original WAR. -- oOo -- * Multi-environment property filtering --- Activation: exists src/main/properties --- You can enable multi-environment property filtering by simply creating the src/main/properties/${env}/${webapp.resource.filter} file with your property values; all files included in src/main/resources and src/main/properties will be filtered with your properties defined; in order to switch between environments, simply attach -Denv=yourenv to your mvn commands. --- Properties --- <env>local</env> <webapp.resource.filter>alfresco-global.properties</webapp.resource.filter> <webapp.resource.build.folder>${project.build.outputDirectory}</webapp.resource.build.folder> <webapp.name>${project.artifactId}</webapp.name> -- oOo -- * Jetty H2 configuration --- Activation: exists jetty/jetty.xml --- You can enable Jetty to run your application(s); by default Jetty will run all contexts using jetty/jetty.xml as Jetty Server configuration, allowing to add the jndi resource needed to start Alfresco Repository webapp; if you want to run multiple webapps - for example share and alfresco - follow the example listed below: <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <executions> <execution> <id>run</id> <goals><goal>run</goal></goals> <phase>package</phase> <configuration> <contextPath>/</contextPath> <webAppSourceDirectory>.</webAppSourceDirectory> <webXml>jetty/root-web.xml</webXml> <contextHandlers> <contextHandler implementation="org.mortbay.jetty.webapp.WebAppContext"> <war>${project.basedir}/../alfresco/target/alfresco.war</war> <contextPath>/alfresco</contextPath> </contextHandler> <contextHandler implementation="org.mortbay.jetty.webapp.WebAppContext"> <war>${project.basedir}/../share/target/share.war</war> <contextPath>/share</contextPath> </contextHandler> </contextHandlers> </configuration> </execution> </executions> </plugin> No newline at end of file