This project contains the bulk of the Alfresco Content Services Repository code.
To make the development process simpler, it brings together code historically in alfresco-core
,
alfresco-data-madel
, alfresco-repository
, alfresco-remote-api
and repository specific
tests and war file creation from acs-community-packaging
. They exist as sub projects within the Maven Reactor and still
create the same artifacts.
Alfresco Core is a library packaged as a jar file which contains the following:
- Various helpers and utils
- Canned queries interface and supporting classes
- Generic encryption supporting classes
Version 7 of the library uses Spring 5, Quartz 2.3 and does not have Hibernate dependency.
Data model is a library packaged as a jar file which contains the following:
- Dictionary, Repository and Search Services interfaces
- Models for data types and Dictionary implementation
- Parsers
Repository is a library packaged as a jar file which contains the following:
- DAOs and SQL scripts
- Various Service implementations
- Utility classes
Tests are combined into test classes split by test type or Spring application context used in the test, see classes in src/test/java/org/alfresco. All of these classes as well as individual tests can be run by specifying the test class name and a set of DB connection properties. Check the travis.yml file for docker images that should be started to provide a suitable test environment. For example:
mvn clean test -Dtest=SomeRepoTest -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql:alfresco -Ddb.username=alfresco -Ddb.password=alfresco
Remote API is a library packaged as a jar file which contains the following:
- REST API framework
- WebScript implementations including V1 REST APIs
- OpenCMIS implementations
Like the alfresco-repository
tests are combined in test classes split by test type or Spring application context used
in the test.
The artifacts can be obtained by:
- downloading from Alfresco maven repository
- getting as Maven dependency by adding the dependency to your pom file:
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-core</artifactId>
<version>version</version>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-data-model</artifactId>
<version>version</version>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-repository</artifactId>
<version>version</version>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-remote-api</artifactId>
<version>version</version>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>content-services-community</artifactId>
<version>version</version>
<type>war</type>
</dependency>
and Alfresco maven repository:
<repository>
<id>alfresco-maven-repo</id>
<url>https://artifacts.alfresco.com/nexus/content/groups/public</url>
</repository>
The SNAPSHOT versions of the artifact are not published.
All current source versions are held in github. Historic versions can be found in Alfresco SVN
Please use this guide to make a contribution to the project.
Although it is possible to work on individual github projects, we recommend working on the alfresco-community-repo
and acs-community-packaging
in a single Intellij IDEA project. They depend on each other and typically you will
want to make changes to both of them if you are changing the repository code.
mkdir work
cd work
git clone git@github.com:Alfresco/alfresco-community-repo.git
git clone git@github.com:Alfresco/acs-community-packaging.git
If you wish to build these projects from the command line, use the following commands.
cd alfresco-community-repo
mvn clean install -Pbuild-docker-images -DskipTests=true -Dversion.edition=Community
cd ..
cd acs-community-packaging
mvn clean install -Pbuild-docker-images -Dmaven.javadoc.skip=true
cd ..
In Intellij IDEA, create a new project using the work
directory as the source.
- File > New Project from Existing Sources > .../work > Maven
As multiple projects have been combined, branch names use the ACS version they are targeting.
For example the code used to create the repository in ACS 6.2.1 is a branch called releases/6.2.1
.
The actual version number of the repository artifacts created by alfresco-community-repo
are however different.
For example release/6.2.1
artifacts are 7.183.x
. This adds some complexity, but ensures that
version numbers do not go backwards in existing releases. It also provides some level of
independence between the repository and other ACS components.