import org.apache.tools.ant.filters.ReplaceTokens
-import groovy.swing.SwingBuilder
plugins {
- // bintray
- id "com.jfrog.bintray" version "1.6"
- id "com.github.spotbugs" version "1.7.1"
+ id 'java-library'
id 'maven-publish'
- id 'signing'
- id 'de.ploing.scmversion' version '0.6.6'
+ id 'java-library-distribution'
+ id "io.github.gradle-nexus.publish-plugin" version "1.1.0"
+ id 'com.palantir.git-version' version "0.13.0"
}
+// calculate version string from git tag, hash and commit distance
+// It treat as release tag when current HEAD has a tag,
+// and repository is clean, no modification,and no untracked files,
+if (versionDetails().isCleanTag) {
+ // drop first 'v' from version tag
+ version = gitVersion().substring(1)
+} else {
+ version = versionDetails().lastTag.substring(1) + '-' + versionDetails().commitDistance + '-' + versionDetails().gitHash + '-SNAPSHOT'
+}
+
+def props = project.file("dictzip-cli/src/main/resources/org/dict/zip/Version.properties")
+task writeVersionFile {
+ def folder = props.getParentFile()
+ if (!folder.exists()) {
+ folder.mkdirs()
+ }
+ props.delete()
+ props.text = "version=" + project.version
+}
+
+jar.dependsOn("writeVersionFile")
+
// common settings
subprojects {
- apply plugin: 'java'
apply plugin: 'jacoco'
+ apply plugin: 'java'
apply plugin: 'checkstyle'
- apply plugin: 'com.jfrog.bintray'
- apply plugin: 'maven'
apply plugin: 'maven-publish'
- apply plugin: 'signing'
- sourceCompatibility = JavaVersion.VERSION_1_8
- [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
checkstyle {
- config = resources.text.fromFile("${rootProject.projectDir}/config/checkstyle/checkstyle.xml")
ignoreFailures = true
toolVersion = '6.16.1'
}
+ version = rootProject.version
+ group = projectGroup
repositories {
- jcenter()
+ mavenCentral()
}
dependencies {
- testImplementation 'org.testng:testng:6.9.10'
+ implementation "org.jetbrains:annotations:23.0.0"
+ testImplementation 'commons-io:commons-io:2.11.0'
+ testImplementation "org.junit.jupiter:junit-jupiter:5.8.2"
+ }
+ test {
+ useJUnitPlatform()
}
- test.useTestNG()
- tasks.withType(JavaCompile) {
- options.compilerArgs << "-Xlint:deprecation" << "-Xlint:unchecked"
+ java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ withSourcesJar()
+ withJavadocJar()
}
javadoc {
options.locale = 'en_US'
}
- task sourcesJar(type: Jar, dependsOn: classes) {
- from sourceSets.main.allSource
- }
-
- task javadocJar(type: Jar, dependsOn: javadoc) {
- from javadoc.destinationDir
- }
-
artifacts {
archives jar
archives sourcesJar
}
}
-project(':dictzip-lib') {
+project(':northside-io') {
+ apply plugin: 'java-library'
+ version = rootProject.version
dependencies {
- testImplementation 'tokyo.northside:northside-io:0.2.0'
- }
- version = project.version
- group = projectGroup
- bintray {
- dryRun = false
- publish = false
- user = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')
- key = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')
- configurations = ['archives']
- pkg {
- repo = 'maven'
- name = 'dictzip-lib'
- userOrg = 'dictzip'
- licenses = ['GPL-2.0+CE']
- vcsUrl = projectUrl
- labels = ['java','dictzip']
- publicDownloadNumbers = true
- }
+ implementation 'commons-io:commons-io:2.11.0'
}
+}
- install {
- repositories.mavenInstaller {
- pom.project {
- name = project.name
- packaging = 'jar'
- description = projectDesc
- url = projectUrl
- version = project.version
- licenses {
- license {
- name = licenseName
- url = licenseUrl
- distribution = 'repo'
+project(':dictzip-lib') {
+ apply plugin: 'java-library'
+ apply plugin: "signing"
+ version = rootProject.version
+
+ dependencies {
+ testImplementation project(':northside-io')
+ }
+
+ publishing {
+ publications {
+ mavenJava(MavenPublication) {
+ from components.java
+ artifactId = "dictzip"
+ pom {
+ name.set("dictzip")
+ description.set(projectDesc)
+ url.set(projectUrl)
+ licenses {
+ license {
+ name.set("GNU General Public License v2.0 w/Classpath exception")
+ url.set("https://www.gnu.org/software/classpath/license.html")
+ }
}
- }
- scm {
- url = githubUrl
- connection = "scm:git:${githubUrl}"
- developerConnection = "scm:git:${githubUrl}"
- }
- developers {
- developer {
- id = projectOwner
- name = developerName
- email = developerEmail
+ scm {
+ connection.set("scm:git:git://github.com/dictzip/dictzip-java.git")
+ developerConnection.set("scm:git:git://github.com/dictzip/dictzip-java.git")
+ url.set(projectUrl)
+ }
+ developers {
+ developer {
+ id.set("miurahr")
+ name.set("Hiroshi Miura")
+ email.set("miurahr@linux.com")
+ }
+ }
+ issueManagement {
+ url.set(projectUrl + "/issues")
}
}
}
}
}
- // maven publish to local repository.(for test)
- uploadArchives {
- repositories.mavenDeployer {
- // for local maven
- repository url: "file://$System.env.HOME/.m2/repository"
- beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
- pom.project {
- name = project.name
- packaging = 'jar'
- description = projectDesc
- url = projectUrl
- version = project.version
- licenses {
- license {
- name = licenseName
- url = licenseUrl
- distribution = 'repo'
- }
- }
- scm {
- url = githubUrl
- connection = "scm:git:${githubUrl}"
- developerConnection = "scm:git:${githubUrl}"
- }
- developers {
- developer {
- id = projectOwner
- name = developerName
- email = developerEmail
- }
- }
+ nexusPublishing {
+ repositories {
+ sonatype {
+ stagingProfileId.set("a1cf138b142cd")
+ nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
+ snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
+ username = project.hasProperty('sonatypeUsername') ? project.property('sonatypeUsername') : System.getenv('SONATYPE_USER')
+ password = project.hasProperty('sonatypePassword') ? project.property('sonatypePassword') : System.getenv('SONATYPE_PASS')
}
}
}
+
+ signing {
+ if (project.hasProperty("signingKey")) {
+ def signingKey = findProperty("signingKey").toString()
+ def signingPassword = findProperty("signingPassword").toString()
+ useInMemoryPgpKeys(signingKey, signingPassword)
+ } else {
+ useGpgCmd()
+ }
+ sign publishing.publications.mavenJava
+ }
+ tasks.withType(Sign) {
+ def hasKey = project.hasProperty("signingKey") || project.hasProperty("signing.gnupg.keyName")
+ onlyIf { hasKey && versionDetails().isCleanTag }
+ }
}
project(':dictzip-cli') {
apply plugin: 'application'
mainClassName = 'org.dict.zip.cli.Main'
applicationName = 'dictzip'
-
+ version = rootProject.version
dependencies {
- implementation project(':dictzip-lib'),
- 'gnu.getopt:java-getopt:1.0.13'
- testImplementation 'tokyo.northside:northside-io:0.2.0'
+ implementation project(':dictzip-lib')
+ implementation 'gnu.getopt:java-getopt:1.0.13'
+ testImplementation project(':northside-io')
}
- version = project.version
- group = projectGroup
- bintray {
- user = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')
- key = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')
- configurations = ['archives']
- pkg {
- repo = 'maven'
- name = 'dictzip-cli'
- userOrg = 'dictzip'
- licenses = ['GPL-3.0']
- vcsUrl = projectUrl
- labels = ['java','dictzip']
- publicDownloadNumbers = true
- }
- }
-
task mandoc(type: Copy) {
from "doc/dictzip.1.in"
into 'build/docs'
distributions {
main {
- baseName = 'dictzip'
contents {
from('build/docs/dictzip.1') {
into 'docs/man/man1'
}
}
}
-
-// askPassword - guarantee asking only once.
-ext {
- askPassword = ''
-}
-String askPassword(prompt) {
- if (ext.'askPassword' != '') {
- return ext.'askPassword'
- }
- def keyPass = ''
- if(System.console() == null) {
- new SwingBuilder().edt {
- dialog(modal: true, title: 'Enter password', alwaysOnTop: true, resizable: false, locationRelativeTo: null, pack: true, show: true) {
- vbox {
- label(text: prompt)
- def input1 = passwordField()
- button(defaultButton: true, text: 'OK', actionPerformed: {
- keyPass = input1.password;
- dispose();
- })
- }
- }
- }
- } else {
- System.console().println()
- keyPass = System.console().readPassword(prompt)
- }
- if (keyPass.size() <= 0) {
- throw new InvalidUserDataException("You must enter the passwords to proceed.")
- }
- ext.'askPassword' = new String(keyPass)
- new String(keyPass)
-}
-
-gradle.taskGraph.whenReady { taskGraph ->
- if (taskGraph.allTasks.any { it instanceof Sign }) {
- allprojects {
- ext.'signing.password' = askPassword("Enter password for PGP key ${property('signing.keyId')}: ")
- }
- }
-}
-
-publishing {
- publications {
- mavenJava(MavenPublication) {
- artifactId = "dictzip"
- groupId = "org.dict.zip"
- version = project.version.toString()
- pom {
- name.set(project.name)
- description.set(projectDesc)
- url.set(projectUrl)
- licenses {
- license {
- name.set("GNU General Public License Version 2+CE")
- url.set("https://www.gnu.org/licenses/old-licenses/gpl-2.0")
- }
- }
- scm {
- connection.set("scm:git:git://github.com/dictzip/dictzip-java.git")
- url.set("https://github.com/dictzip/dictzip-java")
- }
- issueManagement {
- system.set("Trac")
- url.set("https://github.com/dictzip/dictzip-java/issues")
- }
- }
- }
- }
-}
-
-signing {
- required { gradle.taskGraph.hasTask("uploadArchives") || gradle.taskGraph.hasTask("bintrayUpload")}
- sign publishing.publications.mavenJava
- sign configurations.archives
-}