Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. dspace-parent is removed from the project, all dependency management is maintained in the modules that are using those dependencies, a dependency management section may be added to dspace/pom.xml or dspace/modules/pom.xml to support overriding the default dependencies identified in dspace-api, dspace,xmlui-api etc.
  2. dspace-api should be released with a separate version number separate the general DSpace 1.x.x release. For instance, taking on the idea of using Single digit version numbers for releases, We would promote using 1.8.0 for a release of dspace-api while using 8.0 for the release. (dspace-api-1.8.0.jar would be in dspace-release-8.0)
  3. dspace-api should be separated into individual modules. The codebase should be evaluated to determine the extraction points, But strong candidates for pushing into separate packages are:
    • dspace-core: containing org.dspace.plugin and org.dspace.core
    • dspace-legacy-storage: containing org.dspace.storage.rdbms and org.dspace.storage.bitstore
    • dspace-model: containing org.dspace.content and org.dspace.browse (until the circular dependency on Browse can be removed)
    • dspace-app: Applications and addon support found in org.dspace.apps
    • dspace-cli: A refactored ScriptLauncher that uses Service Manager to get Commands.

Technical Approach

...

Changes to Maven Multimodules Build

dspace/trunk/pom.xml (http://scm.dspace.org/svn/repo/dspace/trunk/pom.xml)

Ceases to exist, we will move all projects that use dspace-parent to use dspace-

...

pom (http://scm.dspace.org/svn/repo/modules/dspace-pom/trunk/pom.xml) which is released separately from trunk.

trunk/dspace/pom.xml

Continues to fill its role as an assembly point for constructing a DSpace instance. Important changes are that the assembly is changed so that dependencies are not defined here and a separate "cli" project is created to hold dependencies that will be assembled into the DSpace lib directory. This allows a specialized location to add customizations to go specifically into the lib directory codebase.  Upgrades to DSpace will require migrating your changes in dspace/pom.xml dependencies into the cli project instead.

Code Block

├── modules
│   ├── pom.xml
│   ├── cli
│   │   ├── pom.xml
│   │   └── src
│   │       └── main
│   │           ├── java
│   │           └── resources

trunk/dspace/modules/pom.xml

Will be defined as the place that dependencyManagement is customized for a specific DSpace instance.  Dependency Management is then moved out of the scope of dspace-parent. This allows individual DSpace instances to mediate the versions of dependencies chosen for a specific deployment.

Code Block

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.dspace</groupId>
    <artifactId>modules</artifactId>
    <version>1.8.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>DSpace Addon Modules</name>
    <url>http://www.dspace.org</url>
    <description>DSpace Addon Modules</description>

    <parent>
        <artifactId>dspace-pom</artifactId>
        <groupId>org.dspace</groupId>
        <version>8</version>
    </parent>

    <modules>
        <module>cli</module>
        <module>xmlui</module>
        <module>lni</module>
        <module>oai</module>
        <module>jspui</module>
        <module>sword</module>
        <module>solr</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <!-- DSpace core and endorsed Addons -->
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-api</artifactId>
                <version>1.8.0-SNAPSHOT</version>
            </dependency>

Possible Changes to DSpace Module versioning scheme

...

Module

Scheme

Previous Version

New Version

dspace

N.N

1.7.0

11.10

dspace/modules

N.N

1.7.0

11.10

dspace/modules/...

N.N

1.7.0

11.10

dspace-api

M.M.M

1.7.0

2.0.0

dspace-jspui

M.M.M

1.7.0

2.0.0

dspace-jspui-api

M.M.M

1.7.0

2.0.0

dspace-xxx-yyy

M.M.M

1.7.0

2.0.0

 

 

 

 

...

  • Push a patch for the prototype into the JIRA for DSpace and get feedback from the committers group on the refactorings.

Important Caveats in Maven Build

  1. Assembly and Dependency Management cannot currently occur in the same Maven module, we currently dealt with this by having dspace-parent do dependencyManagement and the dspace assembly project do the assembly.  Approach needs to be retained in moving dependencyManagerment into the dspace/modules/pom.xml and continuing to reserve assembly as part of dspace/pom.xml.