Escidoc Building and Developing Environment

Build infrastructure


The build infrastructure consists of several servers and tools to support all developers and testers of the escidoc project in the development process.

The build process is supported by several servers:


 * Nexus, which holds all the binary artifacts (including external and internal binary dependencies), works as artifacts proxy
 * Continuum, a testing server for nightly builds, unit- and integration testing, releases
 * Maven, a software project management and comprehension tool, used for building, testing and release management
 * Subversion, a source control management tool, with the following repositories:
 * common used by project common_services
 * pubman used by project PubMan
 * virr used by project ViRR
 * faces used by project Faces

Release management
The release management takes care of building new releases which are automatically transferred to archiva to make it available to the public. The eSciDoc Release Lifecycle is responsible that any tasks involved are correctly implemented. After the release is done, the next step is to deploy the release binary to a target system.

Deployment process The necessary steps for a deployment is highly affected on the domain of the target system.

Testing
[[Media:Pubman_and_Selenium_tests.ppt]]
 * Automatic GUI tests with selenium
 * PubMan and Selenium tests

Setting up the workstation
In oder to work on a specific project, you need to setup your workstation to contribute your effort. These Howtos shall help you to install maven and include your favourite IDE in the developing process.
 * Installation of maven
 * Maven settings and profiles
 * Maven integration in eclipse
 * Enabling incremental hot deploy with JRebel (optional)
 * Coding templates, formatter and standards

Deploy own libraries to archiva To deploy own external(!!!) libraries to archiva, use the following instructions in a shell:

mvn deploy:deploy-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=/path/to/file -Durl=http://archiva.mpdl.mpg.de/archiva/repository/internal -DrepositoryId=deployment.webdav

But remember:
 * Before uploading any libraries, check if the artifact you wish to upload is already in the repository. Use the Find artifact functionality of archiva to ensure this.
 * If the upload fails, check if you have the permissions to upload artifacts to the internal archiva repository

Project webpage
The project webpage is a useful information resource for developers or any other interested people. The project webpage contains useful information on the build environment, source code access, javadocs, code analysis etc. All the information of a project is visible on an apache server by project. The current RELEASED project descriptions are:
 * Common Services
 * PubMan
 * Faces
 * ViRR

Information about the current development can be found in the SNAPSHOT project descriptions:
 * Common Services
 * PubMan
 * Faces
 * ViRR

Most of the data on the project webpage is created automatically by maven itself. If you want to add your own content to the project webpage or modify an exsiting one, take a look at the Maven project site guide.

Interesting links
Maven: The Definitive Guide : A deeper look onto Maven.

Current problems and workarounds
[INFO] Updating local copy against the scm... [INFO] Verifying that there are no local modifications... [ERROR] org.apache.maven.shared.release.ReleaseFailureException: Can't release project due to non released dependencies : de.mpg.escidoc.services:common_services:pom:1.0.2-SNAPSHOT org.apache.maven.plugins:maven-changes-plugin:maven-plugin:2.0-SNAPSHOT:runtime in project 'endnotemanager' (de.mpg.escidoc.services:endnotemanager:ejb:1.0.2-SNAPSHOT) at org.apache.maven.shared.release.phase.CheckDependencySnapshotsPhase.checkProject(CheckDependencySnapshotsPhase.java:240) at org.apache.maven.shared.release.phase.CheckDependencySnapshotsPhase.execute(CheckDependencySnapshotsPhase.java:106) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:194) at org.apache.maven.shared.release.DefaultReleaseManager.prepareWithResult(DefaultReleaseManager.java:107) at org.apache.maven.continuum.release.executors.PrepareReleaseTaskExecutor.execute(PrepareReleaseTaskExecutor.java:43) at org.apache.maven.continuum.release.executors.AbstractReleaseTaskExecutor.executeTask(AbstractReleaseTaskExecutor.java:67) at org.codehaus.plexus.taskqueue.execution.ThreadedTaskQueueExecutor$ExecutorRunnable$1.run(ThreadedTaskQueueExecutor.java:116) at edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) at edu.emory.mathcs.backport.java.util.concurrent.FutureTask.run(FutureTask.java:176) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:987) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:528) at java.lang.Thread.run(Thread.java:595)
 * A release with the continuum build server doesn't work. When preparing the release, continuum complains that it cannot handle snapshot dependencies when you do a single module release.


 * The strange behavior is, it works if you do a command line release.


 * Maven has currently problems with tagging a release, if the svn client is > 1.5 It aborts with a 'Item already tagged error'
 * Use these commands for a workaround:

svn up -r head mvn release:prepare -Dresume