group = 'com.tmatesoft.svnkit' version = '1.10.12' wrapper { gradleVersion = '8.10' } def javaProjects() { return subprojects - project(':svnkit-distribution') - project(':svnkit-updatesite') } ext { release = project.hasProperty('release') target = '1.8' compatibleSvnVersion = '1.10.0' if (!release) { rootProject.version = rootProject.version + '-SNAPSHOT' } buildNumber = project.hasProperty('revision') ? ('r' + project.revision) : null if (buildNumber == null) { def buildTime = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US).format(new Date()) buildNumber = (release ? 'snapshot' : 't') + buildTime if (release) { rootProject.version = rootProject.version + '-' + buildNumber } } println "Version: ${rootProject.version}" println "Build Number: ${rootProject.buildNumber}" println "Release: ${rootProject.release}" } allprojects { tasks.withType(Jar).configureEach { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } tasks.withType(Javadoc).configureEach { options.addStringOption('Xdoclint:none', '-quiet') } repositories { mavenCentral() maven { url 'https://maven.tmatesoft.com/content/repositories/releases' } maven { url 'https://maven.tmatesoft.com/content/repositories/snapshots' } } } subprojects { apply plugin : 'base' apply plugin : 'maven-publish' apply plugin : 'signing' version = rootProject.version ext { release = rootProject.release target = rootProject.target compatibleSvnVersion = rootProject.compatibleSvnVersion buildVersion = [ baseVersion : '1.10.10', buildNumber : buildNumber, major: '1', minor: '10', micro: '10' ] buildNumber = rootProject.buildNumber } signing { required { project.hasProperty('signing.keyId') } sign configurations.archives } publishing { repositories { maven { if (project.hasProperty('mavenReleasesRepository') && rootProject.release) { url = "${mavenReleasesRepository}" } else { url = "${mavenSnapshotsRepository}" } credentials(PasswordCredentials) { username "${mavenUser}" password "${mavenPassword}" } } } } } configure(javaProjects()) { apply plugin : 'java' apply plugin : 'java-library' sourceCompatibility = target targetCompatibility = target configurations { sources javadocs jar_archive } java { toolchain { languageVersion = JavaLanguageVersion.of(8) } withSourcesJar() withJavadocJar() } jar { metaInf { from rootProject.file('LICENSE.txt') } } artifacts { sources sourcesJar } } project(':svnkit') { dependencies { api 'org.apache.sshd:sshd-core:2.9.3' api 'org.apache.sshd:sshd-common:2.9.3' api 'net.i2p.crypto:eddsa:0.3.0' api 'de.regnis.q.sequence:sequence-library:1.0.4' api 'com.tmatesoft.sqljet:sqljet:1.1.15' api 'net.java.dev.jna:jna:5.6.0' api 'net.java.dev.jna:jna-platform:5.6.0' // TODO: Delete these abandoned dependencies: com.trilead, com.jcraft api 'com.trilead:trilead-ssh2:1.0.0-build222' api('com.jcraft:jsch.agentproxy.connector-factory:0.0.9') { exclude group: 'net.java.dev.jna' } api 'com.jcraft:jsch.agentproxy.svnkit-trilead-ssh2:0.0.9' // TODO: End of abandoned dependencies api 'org.lz4:lz4-java:1.4.1' testImplementation 'junit:junit:4.8' } artifacts { archives jar, sourcesJar, javadocJar jar_archive jar } publishing { publications { mavenJava(MavenPublication) { artifactId 'svnkit' groupId 'com.tmatesoft.svnkit' from components.java pom { name = 'SVNKit Java(tm) Subversion Library' description = 'Java(tm) library to manage Subversion working copies and repositories' url = 'https://svnkit.com/' scm { url = "https://svn.tmatesoft.com/repos/svnkit" connection = "scm:svn:https://svn.tmatesoft.com/repos/svnkit" developerConnection = "scm:svn:https://svn.tmatesoft.com/repos/svnkit" } organization { name = "TMate Software" url = "https://svnkit.com/" } developers { developer { id = "alexander.kitaev" email = "support@svnkit.com" name = "Alexander Kitaev" } } licenses { license { name = "TMate Open Source License" url = "https://svnkit.com/license.html" distribution = "repos" comments = "GPL-like license with a dual-licensing option for closed source usage" } } } } } } } project(':svnkit-javahl16') { dependencies { api project(path: ':svnkit') api 'org.apache.subversion:svn-javahl-api:1.9.3-SNAPSHOT' testImplementation 'org.apache.subversion:svn-javahl-tests:1.9.3-SNAPSHOT' } artifacts { archives jar, sourcesJar, javadocJar jar_archive jar } publishing { publications { mavenJava(MavenPublication) { artifactId 'svnkit-javahl16' groupId 'com.tmatesoft.svnkit' from components.java pom { name = "SVNKit Java(tm) Subversion JavaHL API implementation" description = "SVNKit Java(tm) Subversion JavaHL API implementation" url = 'https://svnkit.com/' scm { url = "https://svn.tmatesoft.com/repos/svnkit" connection = "scm:svn:https://svn.tmatesoft.com/repos/svnkit" developerConnection = "scm:svn:https://svn.tmatesoft.com/repos/svnkit" } organization { name = "TMate Software" url = "https://svnkit.com/" } developers { developer { id = "alexander.kitaev" email = "support@svnkit.com" name = "Alexander Kitaev" } } licenses { license { name = "TMate Open Source License" url = "https://svnkit.com/license.html" distribution = "repos" comments = "GPL-like license with a dual-licensing option for closed source usage" } } } } } } } project(':svnkit-cli') { dependencies { api project(':svnkit') } artifacts { archives jar, sourcesJar, javadocJar } publishing { publications { mavenJava(MavenPublication) { artifactId 'svnkit-cli' groupId 'com.tmatesoft.svnkit' from components.java pom { name = "SVNKit based Subversion command line client" description = "SVNKit based Subversion command line client" url = 'https://svnkit.com/' scm { url = "https://svn.tmatesoft.com/repos/svnkit" connection = "scm:svn:https://svn.tmatesoft.com/repos/svnkit" developerConnection = "scm:svn:https://svn.tmatesoft.com/repos/svnkit" } organization { name = "TMate Software" url = "https://svnkit.com/" } developers { developer { id = "alexander.kitaev" email = "support@svnkit.com" name = "Alexander Kitaev" } } licenses { license { name = "TMate Open Source License" url = "https://svnkit.com/license.html" distribution = "repos" comments = "GPL-like license with a dual-licensing option for closed source usage" } } } } } } } project(':svnkit-dav') { apply plugin: 'war' javadoc { enabled = false } dependencies { api project(path: ':svnkit') api 'javax.servlet:servlet-api:2.5' } artifacts { archives war } publishing { publications { mavenJava(MavenPublication) { artifactId 'svnkit-dav' groupId 'com.tmatesoft.svnkit' from components.web pom { name = "SVNKit based Subversion HTTP server (servlet)" description = "SVNKit based Subversion HTTP server (servlet)" url = 'https://svnkit.com/' scm { url = "https://svn.tmatesoft.com/repos/svnkit" connection = "scm:svn:https://svn.tmatesoft.com/repos/svnkit" developerConnection = "scm:svn:https://svn.tmatesoft.com/repos/svnkit" } organization { name = "TMate Software" url = "https://svnkit.com/" } developers { developer { id = "alexander.kitaev" email = "support@svnkit.com" name = "Alexander Kitaev" } } licenses { license { name = "TMate Open Source License" url = "https://svnkit.com/license.html" distribution = "repos" comments = "GPL-like license with a dual-licensing option for closed source usage" } } } } } } } project(':svnkit-test') { javadoc { enabled = false } dependencies { api project(':svnkit') api project(':svnkit-cli') } sourcesJar.enabled=false } project(':svnkit-osgi') { sourcesJar { enabled=false } artifacts { archives jar } } project(':svnkit-distribution') { configurations { binaries sources osgi } dependencies { binaries project(path: ':svnkit') binaries project(path: ':svnkit-cli') binaries project(path: ':svnkit-javahl16', configuration: 'archives') sources project(path: ':svnkit', configuration: 'sources') sources project(path: ':svnkit-cli', configuration: 'sources') sources project(path: ':svnkit-javahl16', configuration: 'sources') osgi project(path: ':svnkit') } } import java.text.SimpleDateFormat import java.util.jar.* static def read_manifest(file) { def result = [:] result['File-Name'] = file.getName() def jar = new JarFile(file) try { def manifest = jar.getManifest() if (manifest != null) { manifest.getMainAttributes().each { k,v -> result.put(k.toString(), v) } } } finally { jar.close() } return result } static def build_jar_name(file) { def fileProps = read_manifest(file) def fileBuildVersion = fileProps.get('Build-Version') def fileBuildNumber = fileProps.get('Build-Number') if (fileBuildVersion != null && (fileBuildVersion.endsWith('-SNAPSHOT') || fileBuildVersion.endsWith('-EAP'))) { if (fileBuildNumber != null) { return file.name.substring(0, file.name.length() - '.jar'.length()) + '_' + fileBuildNumber + '.jar' } } return file.name }