Alfresco Documentation
Published on Alfresco Documentation (https://docs.alfresco.com)

Home > Alfresco One 5.1.5 > Developer guide > Alfresco SDK 2.2.0 > Upgrading > Upgrading SDK version for an extension project

Upgrading SDK version for an extension project

This section describes how to upgrade the SDK version that is used by your extension project.

These instructions include information about how to upgrade projects generated from each one of the artifacts. Make sure you are following upgrade instructions for the correct project type and "From version -> To version".

Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  • What changes are allowed in an SDK release? [1] The following describes the kind of changes you can expect (are allowed) in major, minor, and patch releases.
  • Upgrading SDK version from 2.0.0 to 2.1.0 [2] This section contains instructions for how to upgrade an extension project from using SDK version 2.0.0 to using SDK version 2.1.0.
  • Upgrading SDK version from 2.1.0 to 2.1.1 [3] This section contains instructions for how to upgrade an extension project from using SDK version 2.1.0 to using SDK version 2.1.1.
  • Upgrading SDK version from 2.1.1 to 2.2.0 [4] This section contains instructions for how to upgrade an extension project from using SDK version 2.1.1 to using SDK version 2.2.0.
Parent topic: Upgrading [5]

What changes are allowed in an SDK release?

The following describes the kind of changes you can expect (are allowed) in major, minor, and patch releases.

A 3 digit versioning scheme is used, major.minor.patch (e.g. 2.1.0). The following is a list of changes that can go into each one of these releases:

  1. major
    1. Backward incompatible changes (e.g. changes in the archetype project structure, functional changes in archetypes POMs, functional changes in existing profiles)
    2. Changes in the artifact naming
  2. minor Cannot change existing behaviors (e.g. existing profiles semantics, build lifecycle, archetype structure).
    1. New features (e.g. new alfresco-sdk-parent, new archetype profiles, new properties)
    2. New artifacts
  3. patch Ideally no changes to the code of the archetypes.
    1. Bug Fixes
    2. Limited changes to SDK parent and Alfresco Plugin

Note that in addition to this there can be beta releases to give early access to features.

Parent topic: Upgrading SDK version for an extension project [6]

Upgrading SDK version from 2.0.0 to 2.1.0

This section contains instructions for how to upgrade an extension project from using SDK version 2.0.0 to using SDK version 2.1.0.

These instructions include information about how to upgrade projects generated from each one of the Maven artifacts. Make sure you are following upgrade instructions for the correct project type. Default Alfresco versions for SDK 2.0.0 is Community 5.0.c and Enterprise 5.0. After upgrading to SDK 2.1.0 the default Alfresco versions will be Community 5.0.d and Enterprise 5.0.1.

Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  • Upgrading a Repository AMP project from SDK 2.0.0 to 2.1.0 [7] These instructions will walk through what is needed when upgrading a Repository AMP project from using SDK version 2.0.0 to using SDK version 2.1.0.
  • Upgrading a Share AMP project from SDK 2.0.0 to 2.1.0 [8] These instructions will walk through what is needed when upgrading a Share AMP project from using SDK version 2.0.0 to using SDK version 2.1.0.
  • Upgrading an All-in-One (AIO) project from SDK 2.0.0 to 2.1.0 [9] These instructions will walk through what is needed when upgrading an AIO project from using SDK version 2.0.0 to using SDK version 2.1.0.
Parent topic: Upgrading SDK version for an extension project [6]

Upgrading a Repository AMP project from SDK 2.0.0 to 2.1.0

These instructions will walk through what is needed when upgrading a Repository AMP project from using SDK version 2.0.0 to using SDK version 2.1.0.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have a Repository AMP project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [10] from the Repository AMP 2.1.0 SDK archetype and move the code and other changes over to it from the SDK 2.0.0 project, but this method is not covered in this article.
Note: In the following instructions the REPO_AMP_PROJECT_PATH variable denotes the path to where you have your Repository AMP project folder. So, for example, if your Repository AMP project was generated in the C:\alfresco-extensions\acme-repo-amp directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  1. Setting the SDK Version to 2.1.0.

    In the IDE, open up the {REPO_AMP_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

    <parent>
        <groupId>org.alfresco.maven</groupId>
        <artifactId>alfresco-sdk-parent</artifactId>
        <version>2.1.0</version>
    </parent>
  2. Remove the property used to specify the webapp path for Alfresco Repository web application.

    In the project file {REPO_AMP_PROJECT_PATH}/pom.xml scroll down to the properties section. Then remove the property called alfresco.client.contextPath. This property is already set to /alfresco in the SDK parent POM so no need to set it here.

  3. Add the amp-to-war profile with rad dependency.

    In the IDE, open up the {REPO_AMP_PROJECT_PATH}/pom.xml project file. Scroll down so you see the profiles section. Then add the following profile to it:

        <!--
            If the 'amp-to-war' profile is enabled then make sure to bring in the alfresco-rad module,
            which has the H2 scripts and other RAD features.
            -->
        <profile>
            <id>amp-to-war</id>
            <dependencies>
                <dependency>
                    <groupId>org.alfresco.maven</groupId>
                    <artifactId>alfresco-rad</artifactId>
                    <version>${maven.alfresco.version}</version>
                </dependency>
            </dependencies>
        </profile>
  4. Update the Tomcat virtual webapp context file.

    Open the {REPO_AMP_PROJECT_PATH}/tomcat/context.xml file. Change it to look like this for best RAD experience:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- ===================================================================================================================
        This context file is used only in a development IDE for rapid development,
        it is never released with the Alfresco.war
        =================================================================================================================-->
    
    <!-- Setup docBase to something like repo-amp/target/repo-amp-war
         and path to /alfresco
         The Alfresco.war 5.0 does not have a webapp (it used to have Alfresco Explorer but not anymore)
         that we will access, so this docBase might not be needed
    -->
    <Context docBase="${app.amp.client.war.folder}" path="${alfresco.client.contextPath}">
    
      <Resources className="org.apache.naming.resources.VirtualDirContext"
                 extraResourcePaths="/=${project.build.directory}/${project.build.finalName}/web" />
    
      <!-- Setup the virtual class path like this:
           1) target/classes
           2) target/${project.build.finalName}/config
           3) target/test-classes
    
           This way mvn compile can be invoked and all changes will be picked up
      -->
      <Loader searchVirtualFirst="true"
              className="org.apache.catalina.loader.VirtualWebappLoader"
              virtualClasspath="${project.build.outputDirectory};${project.build.directory}/${project.build.finalName}/config;${project.build.testOutputDirectory}" />
    
    
      <!-- This enables hot reloading of web resources from uncompressed jars (while in prod they would be loaded from  WEB-INF/lib/{\*.jar}/META-INF/resources -->
      <JarScanner scanAllDirectories="true" />
    </Context>
    
  5. Replace run scripts.

    Version 2.1.0 of the SDK have changes to the Linux run scripts and have new run scripts for Windows. So it make sense to take the new scripts from a newly generated 2.1.0 Repository AMP project and replace the 2.0.0 scripts with them. So follow these instructions [10] to generate a Repository AMP project based on the 2.1.0 archetype. Then just copy over the {newly generated 2.1.0 Repo AMP}/run.* scripts to the {REPO_AMP_PROJECT_PATH} directory, overwriting the run.sh script.

Your Repository AMP project should now be fully updated to use the 2.1.0 version of the SDK.
Parent topic: Upgrading SDK version from 2.0.0 to 2.1.0 [2]

Upgrading a Share AMP project from SDK 2.0.0 to 2.1.0

These instructions will walk through what is needed when upgrading a Share AMP project from using SDK version 2.0.0 to using SDK version 2.1.0.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have a Share AMP project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [11] from the Share AMP 2.1.0 SDK archetype and move the code and other changes over to it from the SDK 2.0.0 project, but this method is not covered in this article.
Note: In the following instructions the SHARE_AMP_PROJECT_PATH variable denotes the path to where you have your Share AMP project folder. So, for example, if your Share AMP project was generated in the C:\alfresco-extensions\acme-share-amp directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  1. Setting the SDK Version to 2.1.0.

    In the IDE, open up the {SHARE_AMP_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

    <parent>
        <groupId>org.alfresco.maven</groupId>
        <artifactId>alfresco-sdk-parent</artifactId>
        <version>2.1.0</version>
    </parent>
  2. Remove the property used to specify the webapp path for the Alfresco Share web application.

    In the project file {SHARE_AMP_PROJECT_PATH}/pom.xml scroll down to the properties section. Then remove the property called alfresco.client.contextPath. This property is now called share.client.contextPath, and it is already set to /share in the SDK parent POM, so no need to set it here.

  3. Update the name of the property specifying Share Webapp aritifact ID.

    In the project file {SHARE_AMP_PROJECT_PATH}/pom.xml scroll down to the properties section. Then change the name of the property called alfresco.client.war to app.amp.client.war.artifactId.

  4. Add a build section to enable the JS Compression plugin.

    In the same project file {SHARE_AMP_PROJECT_PATH}/pom.xml scroll down to the dependencies end tag. Then add the following build section after it with the yuicompressor-maven-plugin to enable JS compression:

    . . .                        
    </dependencies>
    
    <build>
        <plugins>
            <!-- Compress JavaScript files and store as *-min.js -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>yuicompressor-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  5. Update share-config-custom.xml to enable better RAD.

    Open the {SHARE_AMP_PROJECT_PATH}/src/test/resources/alfresco/web-extension/share-config-custom.xml file and update the web-framework configuration so it looks like this:

    <web-framework>
        <autowire>
            <!-- Changing this to 'development' currently breaks the Admin Console.
                 Instead we make a POST to clear Share dependency caches, see 'clear-caches-refresh-ws' profile. -->
            <mode>production</mode> <!-- not really need in the long run, used for YUI - deprecate -->
        </autowire>
    
        <!--
             We don't need to do this when we have the new refresh mojos in the Alfresco plug-in.
    
             If resource caching has been disabled then all the dependency caches will be cleared
             before processing the Aikau jsonModel request...
                (i.e. this.dojoDependencyHandler.clearCaches() )
    
             For more information see the Aikau source code: https://github.com/Alfresco/Aikau
        -->
        <disable-resource-caching>false</disable-resource-caching>
    </web-framework>
    
  6. Update the Tomcat virtual webapp context file.

    Open the {SHARE_AMP_PROJECT_PATH}/tomcat/context.xml file. Change it to look like this for best RAD experience:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- ===================================================================================================================
        This context file is used only in a development IDE for rapid development,
        it is never released with the Alfresco.war
        =================================================================================================================-->
    
    <!-- Setup docBase to something like share-amp/target/share-amp-war
         and path to /share -->
    <Context docBase="${app.amp.client.war.folder}" path="${share.client.contextPath}">
    
      <Resources className="org.apache.naming.resources.VirtualDirContext"
        extraResourcePaths="/=${project.build.directory}/${project.build.finalName}/web" />
    
      <!-- Configure where the Share (share.war) web application can load classes, test classes, and config -->
      <!-- Setup the virtual class path like this:
           1) target/classes
           2) target/${project.build.finalName}/config
           3) target/test-classes
    
           This way mvn compile can be invoked and all changes will be picked up
      -->
      <Loader searchVirtualFirst="true"
              className="org.apache.catalina.loader.VirtualWebappLoader"
              virtualClasspath="${project.build.outputDirectory};${project.build.directory}/${project.build.finalName}/config;${project.build.testOutputDirectory}" />
    
      <!-- This enables hot reloading of web resources from uncompressed jars (while in prod they would be loaded from  WEB-INF/lib/{\*.jar}/META-INF/resources -->
      <JarScanner scanAllDirectories="true" />
      
    </Context>
    
  7. Replace run scripts.

    Version 2.1.0 of the SDK have changes to the Linux run scripts and have new run scripts for Windows. So it make sense to take the new scripts from a newly generated 2.1.0 Share AMP project and replace the 2.0.0 scripts with them. So follow these instructions [11] to generate a Share AMP project based on the 2.1.0 archetype. Then just copy over the {newly generated 2.1.0 Share AMP}/run.* scripts to the {SHARE_AMP_PROJECT_PATH} directory, overwriting the run.sh script.

Your Share AMP project should now be fully updated to use the 2.1.0 version of the SDK.
Parent topic: Upgrading SDK version from 2.0.0 to 2.1.0 [2]

Upgrading an All-in-One (AIO) project from SDK 2.0.0 to 2.1.0

These instructions will walk through what is needed when upgrading an AIO project from using SDK version 2.0.0 to using SDK version 2.1.0.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have an All-in-One project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [12] from the AIO 2.1.0 SDK archetype and move the code and other changes over to it from the SDK 2.0.0 project, but this method is not covered in this article.
Note: In the following instructions the AIO_PROJECT_PATH variable denotes the path to where you have your All-in-One top project folder. So, for example, if your All-in-One project was generated in the C:\alfresco-extensions\acme-poc directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!

Update the top AIO project file.

  1. Setting the SDK Version to 2.1.0.

    In the IDE, open up the {AIO_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

    <parent>
        <groupId>org.alfresco.maven</groupId>
        <artifactId>alfresco-sdk-parent</artifactId>
        <version>2.1.0</version>
    </parent>
  2. Add a new property for the Alfresco Share Webapp location.

    In the same project file {AIO_PROJECT_PATH}/pom.xml scroll down to the properties section. Then update it with this extra property:

    <properties>
    . . .
        <!-- The Alfresco Share web application is accessible via this URL -->
        <share.client.url>http://localhost:8080/share</share.client.url>
            
  3. Add a new property for the Alfresco RM Module version (OPTIONAL).

    If the Records Management (RM) module is used then add a property specifying the RM version that should be used. In the properties section add this extra property:

    <properties>
    . . .
        <alfresco.rm.version>2.3</alfresco.rm.version>
            
  4. Add a build section to enable some plugins.

    In the same project file {AIO_PROJECT_PATH}/pom.xml scroll down to the dependencyManagement end tag. Then add the following build section after it with the yuicompressor-maven-plugin to enable JS compression and the alfresco-maven-plugin to enable webapp RAD development:

    . . .                        
    </dependencyManagement>
    
    <build>
        <plugins>
            <!-- Compress JavaScript files and store as *-min.js -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>yuicompressor-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.alfresco.maven.plugin</groupId>
                <artifactId>alfresco-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  5. Remove the Records Management (RM) profile.

    In the same project file {AIO_PROJECT_PATH}/pom.xml scroll down to the profiles section. Then remove the profile with the rm id (identifier). The RM module is added via the {AIO_PROJECT_PATH}/repo/pom.xml and the {AIO_PROJECT_PATH}/share/pom.xml project files. See further down in these instructions for more information.

  6. Update the name of the Solr module.

    SDK version 2.1.0 comes with support for Solr 4, which is deployed directly from the maven artefact. The maven module just contains Solr 4 configuration information and because of this has changed name from solr to solr-config, so we need to update to the new name. In the same project file {AIO_PROJECT_PATH}/pom.xml scroll down to the modules section. Update it so it looks like this:

    . . .                        
    <modules>
        <module>repo-amp</module>
        <module>share-amp</module>
        <module>repo</module>
        <module>solr-config</module>
        <module>share</module>
        <module>runner</module>
    </modules>
    Note. You might have added extra modules that are not part of the AIO artefact, don't remove these modules from the definition.

Update the Repository Webapp (alfresco.war) Project file

  1. Remove the Records Management (RM) profile.

    In the project file {AIO_PROJECT_PATH}/repo/pom.xml scroll down to the profiles section. Then remove the profile with the rm id (identifier). The RM module is now instead added permanently as a dependency and overlay.

  2. Add a Records Management (RM) Module Dependency to Repository WAR (OPTIONAL)

    If the RM module is used, then it is now added permanently to the project instead of via profile activation. Add a dependency for it as follows. In the IDE, open up the {AIO_PROJECT_PATH}/repo/pom.xml project file. Scroll down so you see the dependencies section. Then add the following dependency:

    <dependencies>
    . . . 
        <dependency>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>alfresco-rm</artifactId>
            <version>${alfresco.rm.version}</version>
            <type>amp</type>
        </dependency>
  3. Add a Records Management (RM) Module Overlay Repository WAR (OPTIONAL)

    If the RM module is used, then it is now added permanently to the project instead of via profile activation. Add an overlay configuration as follows. In the {AIO_PROJECT_PATH}/repo/pom.xml project file scroll down so you see the overlays section. Then add the following overlay at the end:

    <overlays>
    . . . 
        <overlay>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>alfresco-rm</artifactId>
            <type>amp</type>
        </overlay>
    </overlays>
  4. Make sure the Repository is using the Solr 4 subsystem

    When running all the web applictions during testing the repository webapp (alfresco.war) is reading its configuration from the {AIO_PROJECT_PATH}/repo/src/main/properties/local/alfresco-global.properties file. We need to update it so it uses Solr 4, the following properties should be changed:

    index.subsystem.name=solr4
    solr.backup.alfresco.remoteBackupLocation=${dir.root}/solr4Backup/alfresco
    solr.backup.archive.remoteBackupLocation=${dir.root}/solr4Backup/archive
    

Update the Repository AMP Project file

  1. Remove the property used to specify the artifact ID for the Alfresco WAR.

    In the project file {AIO_PROJECT_PATH}/repo-amp/pom.xml scroll down to the properties section. Then remove the property called alfresco.client.war. This property is now called app.amp.client.war.artifactId and defaults to alfresco, so no need to set it in the repo-amp project file. This property is used when you run with the -Pamp-to-war profile.

  2. Add a Records Management (RM) classes Dependency (OPTIONAL)

    If the RM module is used, then it is now added permanently to the project instead of via profile activation. So to get access to the RM classes add a dependency as follows. In the {AIO_PROJECT_PATH}/repo-amp/pom.xml project file scroll down so you see the dependencies section. Then add the following dependency:

    <dependencies>
    . . . 
        <dependency>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>alfresco-rm</artifactId>
            <version>${alfresco.rm.version}</version>
            <classifier>classes</classifier>
        </dependency>
  3. Remove the Records Management (RM) profile.

    In the project file {AIO_PROJECT_PATH}/repo-amp/pom.xml scroll down to the profiles section. Then remove the profile with the rm id (identifier). The RM classes are now instead added permanently as a dependency.

Update the Share Webapp (share.war) Project file

  1. Add a properties section with a new property for the Alfresco Repository location.

    In the project file {AIO_PROJECT_PATH}/share/pom.xml add the following properties section just after the parent section:

    . . .
    </parent>
    
    <properties>
       <!-- Used in share-config-custom.xml when testing.
            By default points to standard location (local) of Alfresco Repository -->
       <alfresco.repo.url>http://localhost:8080/alfresco</alfresco.repo.url>
    </properties>
  2. Move share-config-custom.xml from share-amp to share.

    The share configuration file has moved from the share AMP sub project to the share WAR project. This is because it contains generic configuration such as where the Repository is running and RAD related configuration. Move the {AIO_PROJECT_PATH}/share-amp/src/test/resources/alfresco/web-extension/share-config-custom.xml file to the {AIO_PROJECT_PATH}/share/src/main/resources/alfresco/web-extension location. Then update the web-framework configuration so it looks like this:

    <web-framework>
        <autowire>
            <!-- Changing this to 'development' currently breaks the Admin Console.
            Instead we make a POST to clear Share dependency caches, see 'clear-caches-refresh-ws' profile. -->
            <mode>production</mode> <!-- not really need in the long run, used for YUI - deprecate -->
        </autowire>
        
        <!--
            We don't need to do this when we have the new refresh mojos in the Alfresco plug-in.
            
            If resource caching has been disabled then all the dependency caches will be cleared
            before processing the Aikau jsonModel request...
            (i.e. this.dojoDependencyHandler.clearCaches() )
            
            For more information see the Aikau source code: https://github.com/Alfresco/Aikau
        -->
        <disable-resource-caching>false</disable-resource-caching>
    </web-framework>
    
  3. Remove the Records Management (RM) profile.

    In the project file {AIO_PROJECT_PATH}/share/pom.xml scroll down to the profiles section. Then remove the profile with the rm id (identifier). The RM module is now instead added permanently as a dependency and overlay.

  4. Add a Records Management (RM) Module Dependency to Share WAR (OPTIONAL)

    If the RM module is used, then it is now added permanently to the project instead of via profile activation. Add a dependency for it as follows. In the IDE, open up the {AIO_PROJECT_PATH}/share/pom.xml project file. Scroll down so you see the dependencies section. Then add the following dependency:

    <dependencies>
    . . . 
        <dependency>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>alfresco-rm-share</artifactId>
            <version>${alfresco.rm.version}</version>
            <type>amp</type>
        </dependency>
  5. Add a Records Management (RM) Module Overlay to Share WAR (OPTIONAL)

    If the RM module is used, then it is now added permanently to the project instead of via profile activation. Add an overlay configuration as follows. In the {AIO_PROJECT_PATH}/share/pom.xml project file scroll down so you see the overlays section. Then add the following overlay at the end:

    <overlays>
    . . . 
        <overlay>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>alfresco-rm-share</artifactId>
            <type>amp</type>
        </overlay>
    </overlays>

Update the Share AMP Project file

  1. Change the name of the property used to specify the artifact ID for the Share WAR.

    In the project file {AIO_PROJECT_PATH}/share-amp/pom.xml scroll down to the properties section. Then change the name of property called alfresco.client.war to its new name app.amp.client.war.artifactId. It defaults to alfresco so we need to override it here with the value share. This property is used when you run with the -Pamp-to-war profile.

  2. Remove the property used to specify the location of the Alfresco Repository Webapp.

    In the project file {AIO_PROJECT_PATH}/share-amp/pom.xml scroll down to the properties section. Then remove the property called alfresco.repo.url. This property is only used by the {AIO_PROJECT_PATH}/share/pom.xml project in an All-in-One extension project.

  3. Remove the property used to specify the port number for embedded Tomcat.

    In the project file {AIO_PROJECT_PATH}/share-amp/pom.xml scroll down to the properties section. Then remove the property called maven.tomcat.port. This property is only used by the {AIO_PROJECT_PATH}/runner/pom.xml project when starting an embeeded Tomcat instance. Default port number is configured to 8080 in the parent SDK pom.

  4. Add dependencies for TestNG and Share Page Object classes.

    In version 2.1.0 of the SDK there are two new profiles called regression-testing and functional-testing that uses Page Objects (PO) to do functional testing of the Share Web application. We need to add all dependencies needed for these tests. In the {AIO_PROJECT_PATH}/share-amp/pom.xml project file scroll down so you see the dependencies section. Then add the following dependencies:

    <dependencies>
    . . . 
         <!--===============================================================
            The following dependencies are needed to be able to compile the
            custom functional tests that are based on Page Objects (PO)
            ===============================================================-->
    
        <!-- Bring in the Share Page Objects (PO) used in our functional tests.
             It contains page objects such as LoginPage -->
        <dependency>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>share-po</artifactId>
            <version>${alfresco.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- Bring in the Share Page Object (PO) Tests that comes with Alfresco. It has
             the org.alfresco.po.share.AbstractTest class that our custom tests extend. -->
        <dependency>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>share-po</artifactId>
            <version>${alfresco.version}</version>
            <classifier>tests</classifier>
            <scope>test</scope>
    
            <!-- Exclude version 2.39.0 of selenium that does not work with latest FF browsers, we include
               version 2.45 later on here -->
            <exclusions>
                <exclusion>
                    <groupId>org.seleniumhq.selenium</groupId>
                    <artifactId>selenium-java</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.seleniumhq.selenium</groupId>
                    <artifactId>selenium-server</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- Bring in newer selenium version -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.45.0-alfresco</version>
        </dependency>
        <!-- Test NG is defined with test scope in share-po, so need it here too -->
        <!-- Alfresco code creates a wrapper around Test NG -->
        <dependency>
            <groupId>org.alfresco.test</groupId>
            <artifactId>alfresco-testng</artifactId>
            <version>1.1</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.hamcrest</groupId>
                    <artifactId>hamcrest-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
    </dependencies>

Replace Modules and Scripts

  1. Replace the runner module.

    The project configuration for the runner module has changed quite a bit in version 2.1.0 of the SDK. And there should not be much custom configuration done to it. So it make sense to take the runner module from a newly generated 2.1.0 AIO project and replace the 2.0.0 runner module with it. So follow these instructions [12] to generate an AIO project based on the 2.1.0 archetype. Then delete the {AIO_PROJECT_PATH}/runner module/directory from the All-in-One project. Now copy the {newly generated 2.1.0 AIO}/runner module into the {AIO_PROJECT_PATH}/runner location.

    The new runner module probably does not have the same parent configuration as your {AIO_PROJECT_PATH} project. So open up the {AIO_PROJECT_PATH}/runner/pom.xml file and make sure the parent section is correct.

    If you have made changes to the virtual web application context because you have added more AMPs to the AIO project, then see these instructions [13] for how to update the 2.1.0 runner context.

  2. Replace the solr module.

    The project configuration for the solr module has changed completely from bringing in the complete Solr 1.4 web application to just bringing in the Solr 4 configuration. So it make sense to take the solr-config module from a newly generated 2.1.0 AIO project and replace the 2.0.0 solr module with it. So follow these instructions [12] to generate an AIO project based on the 2.1.0 archetype (if you have not already done it). Then delete the {AIO_PROJECT_PATH}/solr module/directory from the All-in-One project. Now copy the {newly generated 2.1.0 AIO}/solr-config module into the {AIO_PROJECT_PATH}/solr-config location.

    The new solr-config module probably does not have the same parent configuration as your {AIO_PROJECT_PATH} project. So open up the {AIO_PROJECT_PATH}/solr-config/pom.xml file and make sure the parent section is correct.

    If you have made changes to the Solr configuration, such as adding a synonyms list, then you will have to update the solr-config project with these changes.

  3. Replace run scripts.

    Version 2.1.0 of the SDK have changes to the Linux run scripts and have new run scripts for Windows. So it make sense to take the new scripts from a newly generated 2.1.0 AIO project and replace the 2.0.0 scripts with them. So follow these instructions [12] to generate an AIO project based on the 2.1.0 archetype (if you have not already done it). Then just copy over the {newly generated 2.1.0 AIO}/run.* scripts to the {AIO_PROJECT_PATH} directory, overwriting the run.sh script.

  4. Remove the alf_data_dev directory.

    It is not possible to do an incremental H2 database schema update. The complete alf_data_dev directory needs to be deleted before you run the application again.

Your All-in-One project should now be fully updated to use the 2.1.0 version of the SDK.
Parent topic: Upgrading SDK version from 2.0.0 to 2.1.0 [2]

Upgrading SDK version from 2.1.0 to 2.1.1

This section contains instructions for how to upgrade an extension project from using SDK version 2.1.0 to using SDK version 2.1.1.

These instructions include information about how to upgrade projects generated from each one of the Maven artifacts. Make sure you are following upgrade instructions for the correct project type. Default Alfresco versions for SDK 2.1.0 is Community 5.0.d and Enterprise 5.0.1. After upgrading to SDK 2.1.1 the default Alfresco versions will stay the same.

Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  • Upgrading a Repository AMP project from SDK 2.1.0 to 2.1.1 [14] These instructions will walk through what is needed when upgrading a Repository AMP project from using SDK version 2.1.0 to using SDK version 2.1.1.
  • Upgrading a Share AMP project from SDK 2.1.0 to 2.1.1 [15] These instructions will walk through what is needed when upgrading a Share AMP project from using SDK version 2.1.0 to using SDK version 2.1.1.
  • Upgrading an All-in-One (AIO) project from SDK 2.1.0 to 2.1.1 [16] These instructions will walk through what is needed when upgrading an AIO project from using SDK version 2.1.0 to using SDK version 2.1.1.
Parent topic: Upgrading SDK version for an extension project [6]

Upgrading a Repository AMP project from SDK 2.1.0 to 2.1.1

These instructions will walk through what is needed when upgrading a Repository AMP project from using SDK version 2.1.0 to using SDK version 2.1.1.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have a Repository AMP project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [10] from the Repository AMP 2.1.1 SDK archetype and move the code and other changes over to it from the SDK 2.1.0 project, but this method is not covered in this article.
Note: In the following instructions the REPO_AMP_PROJECT_PATH variable denotes the path to where you have your Repository AMP project folder. So, for example, if your Repository AMP project was generated in the C:\alfresco-extensions\acme-repo-amp directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  1. Setting the SDK Version to 2.1.1.

    In the IDE, open up the {REPO_AMP_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

    <parent>
        <groupId>org.alfresco.maven</groupId>
        <artifactId>alfresco-sdk-parent</artifactId>
        <version>2.1.1</version>
    </parent> 
  2. Update the commented out Alf Data location value.

    In the same project file update the property alfresco.data.location as follows:

    <properties>
        <!-- The following are default values for data location, Alfresco Community version.
             Uncomment if you need to change (Note. current default version for Enterprise edition is 5.0.1)
          <alfresco.version>5.0.d</alfresco.version>
          <alfresco.data.location>/absolute/path/to/alf_data_dev</alfresco.data.location> -->
  3. Update version numbers and add a comment to the demo component bean definition.

    In the {REPO_AMP_PROJECT_PATH}/src/main/amp/config/alfresco/module/repo-amp/context/service-context.xml project file update as follows:

      <!-- A simple module component that will be executed once.
            Note. this module component will only be executed once, and then there will be an entry for it in the Repo.
            So doing for example $ mvn clean install -Prun twice will only execute this component the first time.
            You need to remove /alf_data_dev for it to be executed again. -->
        <bean ...
            <property name="sinceVersion" value="1.0" />
            <property name="appliesFromVersion" value="1.0" />
            ...
        </bean>
Your Repository AMP project should now be fully updated to use the 2.1.1 version of the SDK.
Parent topic: Upgrading SDK version from 2.1.0 to 2.1.1 [3]

Upgrading a Share AMP project from SDK 2.1.0 to 2.1.1

These instructions will walk through what is needed when upgrading a Share AMP project from using SDK version 2.1.0 to using SDK version 2.1.1.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have a Share AMP project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [11] from the Share AMP 2.1.1 SDK archetype and move the code and other changes over to it from the SDK 2.1.0 project, but this method is not covered in this article.
Note: In the following instructions the SHARE_AMP_PROJECT_PATH variable denotes the path to where you have your Share AMP project folder. So, for example, if your Share AMP project was generated in the C:\alfresco-extensions\acme-share-amp directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!
Setting the SDK Version to 2.1.1.

In the IDE, open up the {SHARE_AMP_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

<parent>
    <groupId>org.alfresco.maven</groupId>
    <artifactId>alfresco-sdk-parent</artifactId>
    <version>2.1.1</version>
</parent>
Your Share AMP project should now be fully updated to use the 2.1.1 version of the SDK.
Parent topic: Upgrading SDK version from 2.1.0 to 2.1.1 [3]

Upgrading an All-in-One (AIO) project from SDK 2.1.0 to 2.1.1

These instructions will walk through what is needed when upgrading an AIO project from using SDK version 2.1.0 to using SDK version 2.1.1.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have an All-in-One project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [12] from the AIO 2.1.1 SDK archetype and move the code and other changes over to it from the SDK 2.1.0 project, but this method is not covered in this article.
Note: In the following instructions the AIO_PROJECT_PATH variable denotes the path to where you have your All-in-One top project folder. So, for example, if your All-in-One project was generated in the C:\alfresco-extensions\acme-poc directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  1. Setting the SDK Version to 2.1.1.

    In the IDE, open up the {AIO_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

    <parent>
        <groupId>org.alfresco.maven</groupId>
        <artifactId>alfresco-sdk-parent</artifactId>
        <version>2.1.1</version>
    </parent> 
  2. Update the commented out Alf Data location value.

    In the same parent project file update the property alfresco.data.location as follows:

    <properties>
        <!-- The following are default values for data location, Alfresco Community version, and Records Management Module version.
             Uncomment if you need to change (Note. current default version for Enterprise edition is 5.0.1)
          <alfresco.version>5.0.d</alfresco.version>
          <alfresco.rm.version>2.3</alfresco.rm.version>
          <alfresco.data.location>/absolute/path/to/alf_data_dev</alfresco.data.location> -->
  3. Add test scope for Selenium dependency in Share AMP.

    In the {AIO_PROJECT_PATH}/share-amp/pom.xml project file scroll down to the following dependency. Then add <scope>test</scope>:

    <dependency>
       <groupId>org.seleniumhq.selenium</groupId>
       <artifactId>selenium-java</artifactId>
       <version>2.45.0-alfresco</version>
       <scope>test</scope>
    </dependency>
  4. Update version numbers and add a comment to the demo component bean definition in the Repo AMP.

    In the {AIO_PROJECT_PATH}/repo-amp/src/main/amp/config/alfresco/module/repo-amp/context/service-context.xml project file update as follows:

      <!-- A simple module component that will be executed once.
            Note. this module component will only be executed once, and then there will be an entry for it in the Repo.
            So doing for example $ mvn clean install -Prun twice will only execute this component the first time.
            You need to remove /alf_data_dev for it to be executed again. -->
        <bean ...
            <property name="sinceVersion" value="1.0" />
            <property name="appliesFromVersion" value="1.0" />
            ...
        </bean>
  5. Add property for module log level to repo project.

    In the {AIO_PROJECT_PATH}/repo/pom.xml project file add the following properties section:

    <properties>
            <!-- During development we set log root level to Debug,
                this will be applicable to the log configuration in
                repo/src/main/resources/alfresco/extension/dev-log4j.properties,
                such as DemoComponent logging. -->
            <app.log.root.level>DEBUG</app.log.root.level>
        </properties>
  6. Configure module logging in repo project.

    In the {AIO_PROJECT_PATH}/repo/src/main/resources/alfresco/extension/dev-log4j.properties log configuration file add the following line:

    log4j.logger.org.alfresco.demoamp.DemoComponent=${app.log.root.level}
  7. In the runner project update the properties section.

    Update and add properties as follows in the {AIO_PROJECT_PATH}/runner/pom.xml project file :

    <properties>
        <alfresco.solr.dir>${alfresco.data.location}/solr4</alfresco.solr.dir>
        <alfresco.solr.home.dir>${alfresco.solr.dir}/config</alfresco.solr.home.dir>
        <alfresco.solr.data.dir>${alfresco.solr.dir}/data</alfresco.solr.data.dir>
    </properties>
  8. In the Repo tomcat context file add a comment about resource loading

    In the {AIO_PROJECT_PATH}/runner/tomcat/context-repo.xml file add comments as follows:

       <Resources className="org.apache.naming.resources.VirtualDirContext"
                   extraResourcePaths="/=${project.parent.basedir}/repo-amp/target/repo-amp/web" />
        <!-- IMPORTANT! The extraResourcePaths string need to be on one continues line, so if we add another Repo AMP,
                        it would look something like this:
        <Resources className="org.apache.naming.resources.VirtualDirContext"
                   extraResourcePaths="/=${project.parent.basedir}/repo-amp/target/repo-amp/web,/=${project.parent.basedir}/component-a-repo/target/component-a-repo/web" />
        -->
  9. In the Share tomcat context file add a comment about resource loading

    In the {AIO_PROJECT_PATH}/runner/tomcat/context-share.xml file add comments as follows:

       <Resources className="org.apache.naming.resources.VirtualDirContext"
                   extraResourcePaths="/=${project.parent.basedir}/share-amp/target/share-amp/web" />
        <!-- IMPORTANT! The extraResourcePaths string need to be on one continues line, so if we add another Share AMP,
                        it would look something like this:
        <Resources className="org.apache.naming.resources.VirtualDirContext"
                   extraResourcePaths="/=${project.parent.basedir}/share-amp/target/share-amp/web,/=${project.parent.basedir}/component-a-share/target/component-a-share/web" />
                   -->
  10. In the Solr tomcat context file update all paths

    In the {AIO_PROJECT_PATH}/runner/tomcat/context-solr.xml file update the environment property values as follows:

    <Context>
        <Environment name="solr/home"        type="java.lang.String" value="${alfresco.solr.home.dir}/" override="true"/>
        <Environment name="solr/model/dir"   type="java.lang.String" value="${alfresco.solr.home.dir}/alfrescoModels/" override="true"/>
        <Environment name="solr/content/dir" type="java.lang.String" value="${alfresco.solr.data.dir}/content/" override="true"/>
  11. In the Solr Configuration project update the properties section

    Open up the {AIO_PROJECT_PATH}/solr-config/pom.xml project file. Update the properties sections as follows:

    <properties>
            <alfresco.solr.dir>${alfresco.data.location}/solr4</alfresco.solr.dir>
            <alfresco.solr.home.dir>${alfresco.solr.dir}/config</alfresco.solr.home.dir>
            <alfresco.solr.data.dir>${alfresco.solr.dir}/data</alfresco.solr.data.dir>
        </properties> 
Your All-in-One project should now be fully updated to use the 2.1.1 version of the SDK.
Parent topic: Upgrading SDK version from 2.1.0 to 2.1.1 [3]

Upgrading SDK version from 2.1.1 to 2.2.0

This section contains instructions for how to upgrade an extension project from using SDK version 2.1.1 to using SDK version 2.2.0.

These instructions include information about how to upgrade projects generated from each one of the Maven artifacts. Make sure you are following upgrade instructions for the correct project type. Default Alfresco versions for SDK 2.1.1 is Community 5.0.d and Enterprise 5.0.1. After upgrading to SDK 2.2.0 the default Alfresco versions will be Community 5.1.d and Enterprise 5.1.0.

Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  • Upgrading a Repository AMP project from SDK 2.1.1 to 2.2.0 [17] These instructions will walk through what is needed when upgrading a Repository AMP project from using SDK version 2.1.1 to using SDK version 2.2.0.
  • Upgrading a Share AMP project from SDK 2.1.1 to 2.2.0 [18] These instructions will walk through what is needed when upgrading a Share AMP project from using SDK version 2.1.1 to using SDK version 2.2.0.
  • Upgrading an All-in-One (AIO) project from SDK 2.1.1 to 2.2.0 [19] These instructions will walk through what is needed when upgrading an AIO project from using SDK version 2.1.1 to using SDK version 2.2.0.
Parent topic: Upgrading SDK version for an extension project [6]

Upgrading a Repository AMP project from SDK 2.1.1 to 2.2.0

These instructions will walk through what is needed when upgrading a Repository AMP project from using SDK version 2.1.1 to using SDK version 2.2.0.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have a Repository AMP project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [10] from the Repository AMP 2.2.0 SDK archetype and move the code and other changes over to it from the SDK 2.1.1 project, but this method is not covered in this article.
Note: In the following instructions the REPO_AMP_PROJECT_PATH variable denotes the path to where you have your Repository AMP project folder. So, for example, if your Repository AMP project was generated in the C:\alfresco-extensions\acme-repo-amp directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  1. Setting the SDK Version to 2.2.0.

    In the IDE, open up the {REPO_AMP_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

    <parent>
        <groupId>org.alfresco.maven</groupId>
        <artifactId>alfresco-sdk-parent</artifactId>
        <version>2.2.0</version>
    </parent> 
  2. Add dependency for H2 database scripts.

    In the same project file add the following dependency:

    <!-- If we are running tests then make the H2 Scripts available
             Note. tests are skipped when you are running -Pamp-to-war -->
        <dependency>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>alfresco-repository</artifactId>
            <version>${alfresco.version}</version>
            <classifier>h2scripts</classifier>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  3. Remove alfresco-rad dependency.

    This artifact previously contained the H2 database scripts but they are now available separately. In the same project file remove the following profile and dependency:

    <!--
            If the 'amp-to-war' profile is enabled then make sure to bring in the alfresco-rad module,
            which has the H2 scripts and other RAD features.
    
            TODO: TO INVESTIGATE: This dependency is already defined in the parent SDK pom in the 'amp-to-war' profile
                  but this does not work, it is not include...
    
        <profile>
            <id>amp-to-war</id>
            <dependencies>
                <dependency>
                    <groupId>org.alfresco.maven</groupId>
                    <artifactId>alfresco-rad</artifactId>
                    <version>${maven.alfresco.version}</version>
                </dependency>
            </dependencies>
        </profile> -->
  4. Remove Spring Loaded configuration from run scripts.

    Spring Loaded currently blocks the Repository (Platform) from starting. Update the {REPO_AMP_PROJECT_PATH}/run.sh and run.bat so they don't use Spring Loaded, change the MAVEN_OPTS so it looks like this:

    run.sh: MAVEN_OPTS="-Xms256m -Xmx2G" mvn integration-test -Pamp-to-war
    run.bat: set MAVEN_OPTS=-Xms256m -Xmx2G
  5. Update the Virtual Webapp Context for Repository (alfresco.war).

    Update the virtual webapp context to reflect new directory names and the change so resources can be overridden (it is used when running with -Pamp-to-war). Open the {REPO_AMP_PROJECT_PATH}/tomcat/context.xml file and update it so it looks like this:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- ===================================================================================================================
        This context file is used only in a development IDE for rapid development,
        it is never released with the Alfresco.war
        =================================================================================================================-->
    
    <!-- Setup a virtual context for the /alfresco webapp by specifying this as path for Context.
         The amp-to-war profile uses the tomcat7-maven-plugin to kick off the webapp.
         This profile is used for both the repo and share AMP archetypes, and has no config for path or resources,
         so we need to specify here both the context path and where the webapp resources can be found.
    
         The webapp resources are located in the {repo-amp-dir}/target/amp-war directory, However, we
         cannot just set this up as the docBase attribute for the Context as it would always be read
         before any paths in the extraResourcePaths. So to allow for customizations to override
         stuff in the alfresco.war webapp, such as the /images/logo/logo.png, we add the webapp resource
         path last in the extraResourcePaths.
    
         Note. Alfresco.war 5.0 does not have a webapp, just an index page, the Alfresco Explorer webapp is no longer available.
    -->
    <Context path="${alfresco.client.contextPath}">
        <Resources className="org.apache.naming.resources.VirtualDirContext"
                   extraResourcePaths="/=${project.build.directory}/amp/web,${app.amp.client.war.folder}" />
    
        <!-- Setup the virtual class path like this:
             1) target/classes
             2) target/amp/config
             3) target/test-classes
    
             This way mvn compile can be invoked and all changes will be picked up
        -->
        <Loader searchVirtualFirst="true"
                className="org.apache.catalina.loader.VirtualWebappLoader"
                virtualClasspath="${project.build.outputDirectory};${project.build.directory}/amp/config;${project.build.testOutputDirectory}" />
    
    
        <!-- This enables hot reloading of web resources from uncompressed jars (while in prod they would be loaded from  WEB-INF/lib/{\*.jar}/META-INF/resources -->
        <JarScanner scanAllDirectories="true" />
    </Context>
  6. Update the AMP module Spring context load order.

    Open the {REPO_AMP_PROJECT_PATH}/src/main/amp/config/alfresco/module/<module-id>/module-context.xml file and update it so it looks like this:

    <beans>
    	<!-- This is filtered by Maven at build time, so that module name is single sourced. -->
    	<!-- Note. The bootstrap-context.xml file has to be loaded first.
    		    Otherwise your custom models are not yet loaded when your service beans are instantiated and you
    		    cannot for example register policies on them. -->
            <import resource="classpath:alfresco/module/${project.artifactId}/context/bootstrap-context.xml" />
            <import resource="classpath:alfresco/module/${project.artifactId}/context/service-context.xml" />
            <import resource="classpath:alfresco/module/${project.artifactId}/context/webscript-context.xml" />
    </beans>
  7. Update the AMP module version to align with Maven Artifact version.

    Open the {REPO_AMP_PROJECT_PATH}/src/main/amp/module.properties file and update the version property:

    module.version=${project.version}
  8. Finally remove current alf_data_dev directory with previous database.

    Remove the {REPO_AMP_PROJECT_PATH}/alf_data_dev directory. This is needed as the H2 script artifact does not currently contain upgrade scripts.

Your Repository AMP project should now be fully updated to use the 2.2.0 version of the SDK.
Parent topic: Upgrading SDK version from 2.1.1 to 2.2.0 [4]

Upgrading a Share AMP project from SDK 2.1.1 to 2.2.0

These instructions will walk through what is needed when upgrading a Share AMP project from using SDK version 2.1.1 to using SDK version 2.2.0.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have a Share AMP project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [11] from the Share AMP 2.2.0 SDK archetype and move the code and other changes over to it from the SDK 2.1.1 project, but this method is not covered in this article.
Note: In the following instructions the SHARE_AMP_PROJECT_PATH variable denotes the path to where you have your Share AMP project folder. So, for example, if your Share AMP project was generated in the C:\alfresco-extensions\acme-share-amp directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  1. Setting the SDK Version to 2.2.0.

    In the IDE, open up the {SHARE_AMP_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

    <parent>
        <groupId>org.alfresco.maven</groupId>
        <artifactId>alfresco-sdk-parent</artifactId>
        <version>2.2.0</version>
    </parent>
  2. Remove the Enterprise profile dependency.

    This is not needed any more. In the same project file remove the following profile and dependency:

    <profiles>
            <!--
                Brings in the extra Enterprise specific share classes,
                if the 'enterprise' profile has been activated, needs to be activated manually. -->
            <profile>
                <id>enterprise</id>
                <dependencies>
                    <dependency>
                        <groupId>${alfresco.groupId}</groupId>
                        <artifactId>share-enterprise</artifactId>
                        <version>${alfresco.version}</version>
                        <classifier>classes</classifier>
                        <scope>provided</scope>
                    </dependency>
                </dependencies>
            </profile>
        </profiles>
  3. Update the Virtual Webapp Context for Share (share.war).

    Update the virtual webapp context to reflect new directory names and the change so resources can be overridden (it is used when running with -Pamp-to-war). Open the {SHARE_AMP_PROJECT_PATH}/tomcat/context.xml file and update it so it looks like this:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- ===================================================================================================================
        This context file is used only in a development IDE for rapid development,
        it is never released with the Alfresco.war
        =================================================================================================================-->
    
    <!-- Setup a virtual context for the /share webapp by specifying this as path for Context.
         The amp-to-war profile uses the tomcat7-maven-plugin to kick off the webapp.
         This profile is used for both the repo and share AMP archetypes, and has no config for path or resources,
         so we need to specify here both the context path and where the webapp resources can be found.
    
         The webapp resources are located in the {share-amp-dir}/target/amp-war directory, However, we
         cannot just set this up as the docBase attribute for the Context as it would always be read
         before any paths in the extraResourcePaths. So to allow for customizations to override
         stuff in the share.war webapp, such as the /favicon.ico, we add the webapp resource
         path last in the extraResourcePaths.
    
         Note. most of the UI customizations for Share are done via custom themes.
    -->
    <Context path="${share.client.contextPath}">
      <Resources className="org.apache.naming.resources.VirtualDirContext"
        extraResourcePaths="/=${project.build.directory}/amp/web,${app.amp.client.war.folder}" />
    
      <!-- Configure where the Share (share.war) web application can load classes, test classes, and config -->
      <!-- Setup the virtual class path like this:
           1) target/classes
           2) target/amp/config
           3) target/test-classes
    
           This way mvn compile can be invoked and all changes will be picked up
      -->
      <Loader searchVirtualFirst="true"
              className="org.apache.catalina.loader.VirtualWebappLoader"
              virtualClasspath="${project.build.outputDirectory};${project.build.directory}/amp/config;${project.build.testOutputDirectory}" />
    
      <!-- This enables hot reloading of web resources from uncompressed jars (while in prod they would be loaded from  WEB-INF/lib/{\*.jar}/META-INF/resources -->
      <JarScanner scanAllDirectories="true" />
      
    </Context>
  4. Update the AMP module version to align with Maven Artifact version.

    Open the {SHARE_AMP_PROJECT_PATH}/src/main/amp/module.properties file and update the version property:

    module.version=${project.version}
Your Share AMP project should now be fully updated to use the 2.2.0 version of the SDK.
Parent topic: Upgrading SDK version from 2.1.1 to 2.2.0 [4]

Upgrading an All-in-One (AIO) project from SDK 2.1.1 to 2.2.0

These instructions will walk through what is needed when upgrading an AIO project from using SDK version 2.1.1 to using SDK version 2.2.0.
There are multiple ways to go about an SDK upgrade. These instructions assume that you have an All-in-One project where the source code is managed by a Software Configuration Management (SCM) system such as Git or Subversion. And you cannot just through away the history of this project, you need to upgrade "in-place". On the other hand, if your project is small, and you don't mind starting with a new project in the SCM, it might be easier to just generate a new project [12] from the AIO 2.2.0 SDK archetype and move the code and other changes over to it from the SDK 2.1.1 project, but this method is not covered in this article.
Note: In the following instructions the AIO_PROJECT_PATH variable denotes the path to where you have your All-in-One top project folder. So, for example, if your All-in-One project was generated in the C:\alfresco-extensions\acme-poc directory, then this directory path is the value of this variable.
Important: Make sure you have made a complete backup of your project before you start the upgrade process!
  1. Setting the SDK Version to 2.2.0.

    In the IDE, open up the {AIO_PROJECT_PATH}/pom.xml project file. Scroll down so you see the parent section. Then update it to look as follows:

    <parent>
        <groupId>org.alfresco.maven</groupId>
        <artifactId>alfresco-sdk-parent</artifactId>
        <version>2.2.0</version>
    </parent> 
  2. Add dependency for H2 database scripts.

    In the same project file add a new dependencies section with the following dependency:

    <dependencies>
            <!-- If we are running tests then make the H2 Scripts available.
                 Note. tests are skipped when you are running -Prun -->
        <dependency>
            <groupId>${alfresco.groupId}</groupId>
            <artifactId>alfresco-repository</artifactId>
            <version>${alfresco.version}</version>
            <classifier>h2scripts</classifier>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
  3. Remove Spring Loaded configuration from run scripts.

    Spring Loaded currently blocks the Repository (Platform) from starting. Update the {AIO_PROJECT_PATH}/run.sh and run.bat so they don't use Spring Loaded, change the MAVEN_OPTS so it looks like this:

    run.sh: MAVEN_OPTS="-Xms256m -Xmx2G" mvn clean install -Prun
    run.bat: set MAVEN_OPTS=-Xms256m -Xmx2G
  4. Update the Repo AMP module Spring context load order.

    Open the {AIO_PROJECT_PATH}/<repo-amp-id>/src/main/amp/config/alfresco/module/<module-id>/module-context.xml file and update it so it looks like this:

    <beans>
           <!-- This is filtered by Maven at build time, so that module name is single sourced. -->
    	<!-- Note. The bootstrap-context.xml file has to be loaded first.
    		    Otherwise your custom models are not yet loaded when your service beans are instantiated and you
    		    cannot for example register policies on them. -->
            <import resource="classpath:alfresco/module/${project.artifactId}/context/bootstrap-context.xml" />
            <import resource="classpath:alfresco/module/${project.artifactId}/context/service-context.xml" />
            <import resource="classpath:alfresco/module/${project.artifactId}/context/webscript-context.xml" />
    </beans>
  5. Update the Repo AMP module version to align with Maven Artifact version.

    Open the {AIO_PROJECT_PATH}<repo-amp-id>/src/main/amp/module.properties file and update the version property:

    module.version=${project.version}
  6. Remove selenium-java dependency from the Share AMP project.

    Open the {AIO_PROJECT_PATH}/<share-amp-id>/pom.xml file and remove the following dependency:

    <!-- Bring in newer selenium version -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.45.0-alfresco</version>
            <scope>test</scope>
        </dependency>
  7. Update the Share AMP module version to align with Maven Artifact version.

    Open the {AIO_PROJECT_PATH}/<share-amp-id>/src/main/amp/module.properties file and update the version property:

    module.version=${project.version}
  8. Update the Share AMP Page Object (PO)

    The Share page object project has been updated a bit so the {AIO_PROJECT_PATH}/<share-amp-id>/src/test/java/<package>/demoamp/po/DemoPage.java class need to be updated a bit:

    import org.alfresco.po.share.SharePage;
    import org.alfresco.po.RenderTime;
    import org.openqa.selenium.NoSuchElementException;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.FindBy;
    
    public class DemoPage extends SharePage {
        @FindBy(id="DEMO_SIMPLE_LOGO")
        WebElement logo;
    
        @FindBy(id="DEMO_SIMPLE_MSG")
        WebElement msg;
    
        @SuppressWarnings("unchecked")
        @Override
        public DemoPage render(RenderTime timer) {
    
            // Wait for logo and message to display, then consider page rendered
            while (true) {
                timer.start();
                try {
                    if (isSimpleLogoDisplayed() && isMessageDisplayed()) {
                        break;
                    }
                } catch (NoSuchElementException nse) {
                } finally {
                    timer.end();
                }
            }
    
            return this;
        }
    
        public boolean isSimpleLogoDisplayed() {
            return isDisplayed(logo);
        }
    
        public boolean isMessageDisplayed() {
            return isDisplayed(msg);
        }
    
        public String getMessage() {
            return msg.getText();
        }
    }
  9. And update the Share AMP Page Object (PO) Test

    The Share page object project has been updated a bit so the {AIO_PROJECT_PATH}/<share-amp-id>/src/test/java/<package>/demoamp/DemoPageTestIT.java class need to be updated a bit:

    import org.alfresco.tut.demoamp.po.DemoPage;
    import org.alfresco.po.share.LoginPage;
    import org.alfresco.po.AbstractTest;
    import org.alfresco.po.share.PeopleFinderPage;
    import org.testng.Assert;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Test;
    
    public class DemoPageTestIT extends AbstractTest {
        DemoPage page;
    
        @BeforeClass(groups = {"alfresco-one"})
        public void prepare() throws Exception {
            // Navigate to share, which will redirect to Login page
            driver.navigate().to(shareUrl + "/page");
    
            // Resolve/Bind current page to LoginPage object
            LoginPage loginPage = resolvePage(driver).render();
            loginPage.loginAs(username, password);
        }
    
        @BeforeMethod
        public void loadPage() {
            // Goto demo page
            driver.navigate().to(shareUrl + "/page/hdp/ws/simple-page");
    
            // We need to instantiate the page like this as it is not yet in
            // the factory known list of pages
            page = factoryPage.instantiatePage(driver, DemoPage.class);
        }
    
        @Test
        public void findLogo() {
            Assert.assertTrue(page.isSimpleLogoDisplayed());
        }
    
        @Test
        public void messageIsDisplayed() {
            page.render();
            String msg = page.getMessage();
            Assert.assertNotNull(msg);
            Assert.assertEquals("Hello from i18n!", msg);
        }
    
        /**
         * Example of test reusing methods in abstract share page objects.
         */
        @Test
        public void titleDisplayed() {
            // Invoke render when ready to use page object.
            page.render();
            Assert.assertNotNull(page);
            Assert.assertTrue(page.getTitle().contains("This is a simple page"));
        }
    
        /**
         * Test that show how we are able to reuse share page objects
         * objects in particular the navigation object.
         */
        @Test
        public void navigate() {
            Assert.assertNotNull(page.getNav());
            PeopleFinderPage peopleFinderPage = page.getNav().selectPeople().render();
            Assert.assertNotNull(peopleFinderPage);
        }
    }
  10. Add a Spring version property to the Runner project

    We will need a newer Spring version than 3 to use annotations in the Share PO test classes. Add the following properties section in the {AIO_PROJECT_PATH}/runner/pom.xml file:

    <properties>
            <!-- Bring in newer Spring with support for annotations, used for Page Object tests -->
            <spring.version>4.1.6.RELEASE</spring.version>
    </properties>
  11. Add H2 db script dependency to the tomcat7-maven-plugin in the Runner project

    These scripts come in a separate artifact now and not in the alfresco-rad artifact. In the same project file add a new dependencies section to the plug-in as follows (note. there are actually 2 dependencies to add):

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <dependencies>
            <!-- Bring in the H2 Database scripts needed when running embedded, they are now
                 available from the standard generated artifacts, no longer needed to be picked
                 up from the alfresco-rad project -->
            <dependency>
                <groupId>org.alfresco</groupId>
                <artifactId>alfresco-repository</artifactId>
                <version>${alfresco.version}</version>
                <classifier>h2scripts</classifier>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- Explicitly bring in the Plexus Archiver so assembly goes quicker -->
            <dependency>
                <groupId>org.codehaus.plexus</groupId>
                <artifactId>plexus-archiver</artifactId>
                <version>2.3</version>
            </dependency>
        </dependencies>
        <executions>
        . . .
  12. Add API Explorer webapp to the tomcat7-maven-plugin in the Runner project

    The API Explorer can be used to test out/explore the available ReST APIs in an easy way. This is a convenience webapp that is optional to install:

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        . . .
        <configuration>
            . . .
            <webapps>
                . . .
                <webapp>
                    <groupId>org.alfresco</groupId>
                    <artifactId>api-explorer</artifactId>
                    <version>${maven.alfresco.api.explorer.version}</version>
                    <contextPath>/api-explorer</contextPath>
                    <type>war</type>
                    <asWebapp>true</asWebapp>
                </webapp>
            </webapps>. . .
                        
  13. Update dependencies section for the regression-testing profile in the Runner project

    We need to bring in Spring 4 for example, in the same project file, update the profile dependencies section so it looks like this:

    ...<dependencies>
            <!-- Bring in the Share Page Objects (PO) used in our functional tests.
                 It contains page objects such as LoginPage and it also brings
                 in selenium-grid and selenium. -->
            <dependency>
                <groupId>${alfresco.groupId}</groupId>
                <artifactId>share-po</artifactId>
                <version>${alfresco.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- Bring in the Share Page Object (PO) Tests that comes with Alfresco. It has
                 the org.alfresco.po.share.AbstractTest class that our custom tests extend. -->
            <dependency>
                <groupId>${alfresco.groupId}</groupId>
                <artifactId>share-po</artifactId>
                <version>${alfresco.version}</version>
                <classifier>tests</classifier>
                <scope>test</scope>
    
                <!-- Exclude selenium as it is already brought in by share-po dependency above -->
                <exclusions>
                    <exclusion>
                        <groupId>org.seleniumhq.selenium</groupId>
                        <artifactId>selenium-java</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.seleniumhq.selenium</groupId>
                        <artifactId>selenium-server</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- Test NG is defined with test scope in share-po, so need it here too -->
            <!-- Alfresco code creates a wrapper around Test NG -->
            <dependency>
                <groupId>org.alfresco.test</groupId>
                <artifactId>alfresco-testng</artifactId>
                <version>1.1</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.hamcrest</groupId>
                        <artifactId>hamcrest-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- Bring in newer selenium version if required
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>2.48.0</version>
                <scope>test</scope>
            </dependency>
            -->
            <!-- Need to bring in a newer Spring that supports annotations, Alfresco brings in older one -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
        </dependencies>...
  14. Update dependencies section for the functional-testing profile in the Runner project

    Same thing as for the regression testing, we need to bring in Spring 4, in the same project file, update the profile dependencies section so it looks like this:

    ...<dependencies>
            <!-- Bring in the Share Page Objects (PO) used in our functional tests.
                 It contains page objects such as LoginPage and it also brings
                 in selenium-grid and selenium. -->
            <dependency>
                <groupId>${alfresco.groupId}</groupId>
                <artifactId>share-po</artifactId>
                <version>${alfresco.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- Bring in the Share Page Object (PO) Tests that comes with Alfresco. It has
                 the org.alfresco.po.share.AbstractTest class that our custom tests extend. -->
            <dependency>
                <groupId>${alfresco.groupId}</groupId>
                <artifactId>share-po</artifactId>
                <version>${alfresco.version}</version>
                <classifier>tests</classifier>
                <scope>test</scope>
    
                <!-- Exclude selenium as it is already brought in by share-po dependency above -->
                <exclusions>
                    <exclusion>
                        <groupId>org.seleniumhq.selenium</groupId>
                        <artifactId>selenium-java</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.seleniumhq.selenium</groupId>
                        <artifactId>selenium-server</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- Test NG is defined with test scope in share-po, so need it here too -->
            <!-- Alfresco code creates a wrapper around Test NG -->
            <dependency>
                <groupId>org.alfresco.test</groupId>
                <artifactId>alfresco-testng</artifactId>
                <version>1.1</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.hamcrest</groupId>
                        <artifactId>hamcrest-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- Bring in newer selenium version if required
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>2.48.0</version>
                <scope>test</scope>
            </dependency>
            -->
            <!-- Need to bring in a newer Spring that supports annotations, Alfresco brings in older one -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
        </dependencies>...
  15. Update Virtual Webapp context for Repository (alfresco.war) in the Runner project

    Update directory paths for extra resource paths and AMP config, in the {AIO_PROJECT_PATH}/runner/tomcat/context-repo.xml file, update the extraResourcePaths and virtualClasspath as follows:

    ...
           extraResourcePaths="/=${project.parent.basedir}/repo-amp/target/amp/web" />
                   ...
           virtualClasspath="${project.parent.basedir}/repo-amp/target/classes;
                ${project.parent.basedir}/repo-amp/target/amp/config;
                ${project.parent.basedir}/repo-amp/target/test-classes"
                ...
    Note. if you got more Repo AMPs in your AIO project then you need to update the paths for them too.
  16. Update Virtual Webapp context for Share (share.war) in the Runner project

    Update directory paths for extra resource paths and AMP config, in the {AIO_PROJECT_PATH}/runner/tomcat/context-share.xml file, update the extraResourcePaths and virtualClasspath as follows:

    ...
           extraResourcePaths="/=${project.parent.basedir}/share-amp/target/amp/web" />
                   ...
           virtualClasspath="${project.parent.basedir}/share-amp/target/classes;
                ${project.parent.basedir}/share-amp/target/amp/config;
                ${project.parent.basedir}/share-amp/target/test-classes;
                ${project.parent.basedir}/share/target/test-classes"
                ...
    Note. if you got more Repo AMPs in your AIO project then you need to update the paths for them too.
  17. Add maven-dependency-plugin to the Share project

    We will need it to unpack the MANIFEST.MF file so we can save it and store it in the new custom WAR. Open the {AIO_PROJECT_PATH}/share/pom.xml file and add the plug-in just before the maven-war-plugin:

    <plugin>
            <!-- Bring in the Maven Dependency plugin so we can unpack and store the MANIFEST.MF file.
                 It will be used in the custom Share WAR that is produced by the WAR plugin,
                 it otherwise gets overwritten by the overlay process. -->
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                    <configuration>
                        <includeTypes>war</includeTypes>
                        <includeGroupIds>org.alfresco</includeGroupIds>
                        <includeArtifactIds>share</includeArtifactIds>
                        <includes>META-INF/MANIFEST.MF</includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
  18. Add archive section to the maven-war-plugin in the Share project

    Store the custom MANIFEST.MF file when we build the custom share.war. Open the {AIO_PROJECT_PATH}/share/pom.xml file and add the archive section to the maven-war-plugin:

    <artifactId>maven-war-plugin</artifactId>
       <configuration>
        <!-- Bring in the MANIFEST.MF file from the original share.war, it contains version information
             that is needed for it to operate properly -->
        <archive>
            <addMavenDescriptor>false</addMavenDescriptor>
            <manifestFile>${project.build.directory}/dependency/META-INF/MANIFEST.MF</manifestFile>
        </archive>
  19. Finally remove current alf_data_dev directory with previous database.

    Remove the {AIO_PROJECT_PATH}/alf_data_dev directory. This is needed as the H2 script artifact does not currently contain upgrade scripts.

Your All-in-One project should now be fully updated to use the 2.2.0 version of the SDK.
Parent topic: Upgrading SDK version from 2.1.1 to 2.2.0 [4]

Source URL: https://docs.alfresco.com/5.1/concepts/alfresco-sdk-upgrading-sdk-version.html

Links:
[1] https://docs.alfresco.com/../concepts/alfresco-sdk-upgrading-what-changes-are-allowed-in-release.html
[2] https://docs.alfresco.com/../concepts/alfresco-sdk-upgrading-sdkversion-200-210.html
[3] https://docs.alfresco.com/../concepts/alfresco-sdk-upgrading-sdkversion-210-211.html
[4] https://docs.alfresco.com/../concepts/alfresco-sdk-upgrading-sdkversion-211-220.html
[5] https://docs.alfresco.com/../concepts/alfresco-sdk-upgrading.html
[6] https://docs.alfresco.com/../concepts/alfresco-sdk-upgrading-sdk-version.html
[7] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-repo-amp-sdkversion-200-210.html
[8] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-share-amp-sdkversion-200-210.html
[9] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-aio-sdkversion-200-210.html
[10] https://docs.alfresco.com/alfresco-sdk-tutorials-amp-archetype.html
[11] https://docs.alfresco.com/alfresco-sdk-tutorials-share-amp-archetype.html
[12] https://docs.alfresco.com/alfresco-sdk-tutorials-all-in-one-archetype.html
[13] https://docs.alfresco.com/alfresco-sdk-advanced-add-custom-amps-aio.html
[14] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-repo-amp-sdkversion-210-211.html
[15] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-share-amp-sdkversion-210-211.html
[16] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-aio-sdkversion-210-211.html
[17] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-repo-amp-sdkversion-211-220.html
[18] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-share-amp-sdkversion-211-220.html
[19] https://docs.alfresco.com/../tasks/alfresco-sdk-upgrading-aio-sdkversion-211-220.html