Skip to content
Snippets Groups Projects
Commit 3f75a786 authored by Lukas Ladenberger's avatar Lukas Ladenberger
Browse files

initial commit of releng project (contains gradle build files)

git-svn-id: svn://svn.code.sf.net/p/rodin-b-sharp/svn/trunk/Handbook@14618 1434b563-b632-4741-aa49-43a3a8374d2e
parent 54559b3f
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.rodinp.handbook.releng</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
groupID = "org.rodinp.handbook"
features = ["org.rodinp.handbook.feature"] // must be the same as the folder name
descriptions = [["org.rodinp.handbook.feature": "Rodin Handbook"] ] // label and descriptions of the features
repositoryName = groupID+".repository" // will be the folder name
parentID = groupID+".parent" // will be the same as the folder name
targetRepositories = ["http://download.eclipse.org/releases/indigo/"] // ps Repository with Target Definition File
apply from: 'tycho_build.gradle'
// Local tasks
task importPlugin << {
sourcedir = 'org.rodinp.handbook.feature/build/eclipse'
targetdir = 'org.rodinp.handbook'
delete file(targetdir)
new File(targetdir).mkdirs()
copy {
from sourcedir
into targetdir
}
}
task collectArtifacts(type:Copy) {
from groupID+'.repository/target/repository/'
into 'updatesite'
from "index.html"
into 'updatesite'
}
include 'org.rodinp.handbook', 'org.rodinp.handbook.feature'
\ No newline at end of file
apply plugin: 'base'
def projects(int i){
return subprojects.name[i]
}
// returns the name of a subproject listed in the settings.gradle file
def numberOfProjects(){
return subprojects.name.size()
}
// returns the number of projects listed in the settings.gradle file
/* -- Return ParentId -- */
def parentId(){
return parentID
}
/*
* This is the project of the parent Pom
* The Tycho Maven Build is triggered from
* this project's pom
*/
/* -- Return Group Id -- */
def groupId(){
return groupID
}
/*
* This Group ID will be used in every sub project
*/
/////////////////////////////////////////////////////////////////////////////////////////
// -- !!! DEFINING SUB PROJECTS !!! -- //
/////////////////////////////////////////////////////////////////////////////////////////
subprojects {
apply plugin: 'base'
task deleteArtifacts(type: Delete) {
delete 'target','pom.xml'
}
task deploy() <<{
description = "\tGenerating the Tycho Poms. Please remember to add a '.qualifier' to the version numbers!"
versionNumber = 'Version Number Error:\tcheck Manifest for Bundle-Version Number and make sure to add a ".qualifier" to the version numbers!\n'
artifactId = 'Could not find Bundle-SymbolicName in Manifest.file'
/* -- In case of changed Manifest File in Eclipse:
*
* Version Numbers of the projects are collected via
* regular expressions in the Manifest.MF File.
* Versionnumber of the projects are equal to their
* Bundle-Version Number
*/
if(features.every{ it != project.name }){ // Generating Poms for sub projects except features
content = new File("${project.name}/META-INF/MANIFEST.MF").getText("UTF-8")
printFileLine = {
if( it ==~ /Bundle-Version.+qualifier/ ){
versionNumber = it.substring(16) // possibile error: cuts off first 16 chars
/* Version Number is taken from Bundle-Version in Manifest.MF
* If there is no Bundle-Version or the versionnumber needs to
* be taken from a different key word, please change the
* regular expression and the substring above
*/
}
if( it ==~ /Bundle-SymbolicName:.+/ ){
artifactId = it.substring(21)
artifactId = artifactId.replace(";singleton:=true",'')
}
/* Artifact ID is taken from Bundle-SymbolicName minus the
* 16 chars ';singleton:=true'
*/
}
content.eachLine( printFileLine )
println artifactId
println "\t"+versionNumber
def f = new File(artifactId+'/pom.xml')
f.delete()
f << start()+elder()+artifact(artifactId, versionNumber)+end()
/*
* old pom.xml files are deleted and replaced by new auto generated Tycho pom.xml files
*/
}else{ // if subprojects aren't a feature
// -- Features -- //
if(features.any{ it == project.name } ){
boolean idfound = false
content = new File("${project.name}/feature.xml").getText("UTF-8")
printFileLine = {
if( it ==~ /.+version.+qualifier.+/ ){
versionNumber = it.substring(15,it.size()-1)
// possibile error: cuts off first 15 chars and leaves out last '"'
/* Version Number is taken from Feature.xml
* feature.xml is searched for version="version.qualifier"
* first 15 chars and last '"' are cut off
*/
}
if( it ==~ /.+id=".+/ && idfound == false ){
artifactId = it.substring(10,it.length()-1)
idfound = true
}
/* Artifact ID is taken from Bundle-SymbolicName minus the
* 16 chars ';singleton:=true'
*/
}
content.eachLine( printFileLine )
println artifactId
println "\t"+versionNumber
def f = new File(artifactId+'/pom.xml')
f.delete()
f << feature(artifactId, versionNumber)
}
}
}
}// defining subprojects
clean {
dependsOn += subprojects.deleteArtifacts
}
task createParent() << {
// --------- define Parent --------- //
new File("${parentID}").mkdir()
versionNumber = '1.0.0.qualifier'
artifactId = parentId()
def f = new File(artifactId+'/pom.xml')
f.delete()
f << parentPom(artifactId)
for(int i = 0; i < targetRepositories.size(); i++){
f << repos(targetRepositories[i], i)
}
f << endRepos()
f << moduleStart()
for(int i = 0; i < numberOfProjects(); i++){
f << module(projects(i))
}
f << module(repositoryName)
f << endParent()
}
task createRepository() << {
// ------------ define Repository --------- //
new File("${repositoryName}").mkdir()
versionNumber = '1.0.0.qualifier'
artifactId = repositoryName
featureVersionNumber = '1.0.0.qualifier'
def f = new File(artifactId+'/category.xml')
f.delete()
f << categoryHead()
for(int i = 0; i < features.size(); i++){
content = new File("${features[i]}/feature.xml").getText("UTF-8")
printFileLine = {
if( it ==~ /.+version.+qualifier.+/ ){
featureVersionNumber = it.substring(15,it.size()-1)
// possibile error: cuts off first 15 chars and leaves out last '"'
/* Version Number is taken from Feature.xml
* feature.xml is searched for version="version.qualifier"
* first 15 chars and last '"' are cut off
*/
}
}
content.eachLine( printFileLine )
f << categoryFeatures(features[i], featureVersionNumber)
}// for
for(int i = 0; i < features.size(); i++){
f << categoryDescription(features[i], descriptions[features[i]][0] ,descriptions[features[i]][1])
// featureName, label, description
}//for
f << categoryEnd()
def pom = new File(artifactId+'/pom.xml')
pom.delete()
pom << reposi()
}// end of repository definition
task createPoms(dependsOn: [createParent, createRepository, subprojects.deploy])
task install(dependsOn: [createPoms] , type:Exec) {
description = "\tExecutes a 'mvn install' of the parent pom.xml and auto-generates Tycho Poms"
commandLine 'mvn', 'install', '-f', parentID+'/pom.xml'
}
//--- Defining Tycho POM parts --//
def artifact(artifactId,versionNumber) { """
<groupId>${groupId()}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${versionNumber}</version>
<packaging>eclipse-plugin</packaging>
""" }
def start() { """<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
"""}
def elder() {"""
<parent>
<groupId>${groupId()}</groupId>
<artifactId>${parentId()}</artifactId>
<version>1.0.0.qualifier</version>
<relativePath>../${parentId()}/pom.xml</relativePath>
</parent>
"""}
def end() {"""
</project>
"""}
// -- defining Parent Pom -- //
def parentPom(artifactId) { """<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>${groupId()}</groupId>
<artifactId>${artifactId}</artifactId>
<version>1.0.0.qualifier</version>
<packaging>pom</packaging>
<!-- this is the parent POM from which all modules inherit common settings -->
<properties>
<tycho-version>0.14.1</tycho-version>
</properties>
<repositories>
<!-- configure p2 repository to resolve against -->
"""}
def repos(String targetRepo, int i) {"""
<repository>
<id>targetRepository${i}</id>
<layout>p2</layout>
<url>${targetRepo}</url>
</repository>
"""}
def endRepos() {"""
</repositories>
<build>
<plugins>
<plugin>
<!-- enable tycho build extension -->
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>0.14.1</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
"""}
def moduleStart(){"""
<!-- the modules that should be built together -->
<modules>
"""}
//for(int i = 0; i < numberOfProjects(); i++)
def module(String project){""" <module>../${project}</module>
"""}
def endParent() {"""
</modules>
</project>
"""}
// end of defining parent pom.xml
// repository Pom
def reposi() { """
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>${groupID}</groupId>
<artifactId>${parentID}</artifactId>
<version>1.0.0.qualifier</version>
<relativePath>../${parentID}/pom.xml</relativePath>
</parent>
<groupId>${groupID}</groupId>
<artifactId>${repositoryName}</artifactId>
<version>1.0.0.qualifier</version>
<packaging>eclipse-repository</packaging>
</project>
"""}
// creates a category in
def categoryHead() { """<?xml version="1.0" encoding="UTF-8"?>
<site>
"""}
def categoryFeatures(artifactId, versionNumber){"""
<feature url="features/${artifactId}_${versionNumber}.jar" id="${artifactId}" version="${versionNumber}">
<category name="${artifactId}.category"/>
</feature>
"""}
def categoryDescription(artifactId, categoryName, categorydescription){"""
<category-def name="${artifactId}.category" label="${categoryName}">
<description>
${categorydescription}
</description>
</category-def>
"""}
def categoryEnd(){"""
</site>
"""}
// end of category definition
// feature pom
def feature(artifactId, versionNumber) { """
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>${groupId()}</groupId>
<artifactId>${parentId()}</artifactId>
<version>1.0.0.qualifier</version>
<relativePath>../${parentId()}/pom.xml</relativePath>
</parent>
<groupId>${groupId()}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${versionNumber}</version>
<packaging>eclipse-feature</packaging>
</project>
"""}
// end of feature pom
// Build Script can be executed via gradle install
// Pom Generation can be executed via gradle deploy
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment