Open SRP Server has multiple maven published jar libraries which should be included in a project's build.
These libraries are:
- opensrp-server-common
Uploading to Maven
All the above projects have the same structure as far as configuration.
To upload files to maven,
- Update the pom.xml file in the root of the project to change the <version> tag. If building for a snapshot, include the word 'SNAPSHOT' in the version name. If building for release DO NOT include the suffix. Thus for a Non-snapshot release, it would read VERSION_NAME=1.0.
fig.1: example for opensrp server common
- Create a global maven settings.xml file (if it doesn't exist) in ${user.home}/.m2/ folder
- Update the settings file with your nexus server credentials.
...
mvn clean deploy
Viewing artifacts Maven
To see if the upload was successful you can visit: https://oss.sonatype.org/content/groups/public/org/smartregister/
Using/Including the artifacts in a project
...
compile('org.smartregister:opensrp-client-core:1.0.0-SNAPSHOT@aar') {
transitive = true
}
NB: Remember to include transitive=true inorder for the aar dependencies to be included too
...
- Update the file located in ~/.gradle/gradle.properties with your signing key id, password and secret key-ring file path.
...
fig.3: example of gradle.properties file global setting with the signing credentials
- Update the gradle.properties file in the project and remove the '-SNAPSHOT' suffix. e.g for the opensrp-client-core example It should look like this now .
...
https://oss.sonatype.org/content/groups/public/org/smartregister/opensrp-client-growth-monitoring/
Using the MAJOR.MINOR.BUILD system for versioning, when you update the gradle.properties you increment the BUILD value by one. e.g. if the last snapshot for Growth Monitoring was 1.0.1-SNAPSHOT/ you set the VERSION_NAME value to 1.0.2-SNAPSHOT
...
Once a release version is ready, the MAJOR.MINOR.BUILD value for the very first one starts at 1.0.0. If an update to the release is made the BUILD value is also incremented by one. If a new release is created from a new snapshot (whose versioning will start at 1.1.0 after the release) the next Release Version willl start at 1.1.0.
Major changes in the products will warrant an increment of the MAJOR value which will then increment by one, thus versioning starting at 2.0.0 and following the same format as above for future updates.
...
When refreshing dependencies as you add code changes to the various modules in the org.smartregister package, you need to clear the local gradle and maven cache with the following in order the latest changes to reflect... so run
rm -rf ~/.m2/repository/org/smartregister/
and then run
rm -rf ~/.gradle/caches/modules-2/files-2.1/org.smartregister/
and then
./gradlew clean build --refresh-dependencies
Development efficiency
During development it might be inefficient to publish minor updates to the library even on maven local just to test your new changes or during debugging. Thus when developing it is recommended to include the library dependency by using the compile project syntax. e.g when developing the opensrp-client-growth-monitoring library include the library in the sample project using this syntax in sample's build.gradle
compile project(":opensrp-growth-monitoring")
Tagging Releases
It is recommended to tag releases and snapshots once you push to maven.
...
Closing and Promoting Releases
For Release versions, once you have uploaded the release artifacts using uploadArchives gradle task, you are now ready to push the artifact to the main Maven Repository. This can be done in two ways:
- Using the procedure in the above section Uploading the Release Artifacts to Maven
- By using the gradle task closeAndReleaseRepository right after running uploadArchives
...