diff --git a/build.gradle b/build.gradle index c7d6471..8e03cf1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,89 +1,147 @@ -plugins { - id 'application' -} - -repositories { - mavenCentral() - - // since the Jasper devs keep using their own custom builds of ancient - // versions of other projects we need to add a repository for their - // "special" versions. - - maven { - url 'https://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/' - } - -} - -dependencies { - implementation group: 'com.h2database', name: 'h2', version: '1.4.200' - implementation group: 'net.sourceforge.dynamicreports', name: 'dynamicreports-core', version: '6.12.1' - implementation group: 'org.simplejavamail', name: 'simple-java-mail', version: '7.1.1' - implementation group: 'com.formdev', name: 'flatlaf', version: '2.3' - implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1' - implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.36' - implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.11' -} - -task copyLibs(type: Copy) { - from configurations.implementation - into 'libs/' -} - -project.configurations.implementation.setCanBeResolved(true) - -jar { - manifest { - attributes ( - 'Main-Class': 'Main', - 'Class-Path': configurations.implementation.collect { 'lib/' + it.name }.join(' ') - ) - } -} - -task createMissingSourceDirs { - group = "Directories" - description = "Create all of the missing source directories for this project." - doFirst { - sourceSets.each { def sourceRoot -> - sourceRoot.allSource.srcDirTrees.each { def sourceDir -> - if(!sourceDir.dir.exists()) { - println "Creating ${sourceDir}" - mkdir sourceDir.dir - } - } - } - } -} - -task deleteEmptySourceDirs { - group = "Directories" - description = "Delete all empty source directories." - doFirst { - sourceSets.each { def sourceRoot -> - sourceRoot.allSource.srcDirTrees.each { def sourceDir -> - if(sourceDir.dir.exists() && sourceDir.dir.isDirectory() && sourceDir.dir.list().length == 0) { - println "Removing empty ${sourceDir}" - sourceDir.dir.delete() - } - } - } - } - -} - -task openBuildFolder { - group = "Directories" - description = "Open the project build directory in the system file manager." - doFirst { - println('Opening: ' + file(buildDir)) - java.awt.Desktop.getDesktop().open(file(buildDir)); - } -} - -compileJava { - sourceCompatibility = '1.8' - targetCompatibility = '1.8' -} - -mainClassName = 'Main' +plugins { + id 'application' +} + +def defaultMainClassName = "Main" + +application { + mainClass = project.hasProperty("mainClass") ? project.getProperty("mainClass") : defaultMainClassName; +} + +compileJava { + sourceCompatibility = "1.8"; + targetCompatibility = "1.8"; +} + +repositories { + mavenCentral() + + // since the Jasper devs keep using their own custom builds of ancient + // versions of other projects we need to add a repository for their + // "special" versions. + maven { + url 'https://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/' + } + +} + +dependencies { + implementation group: 'com.h2database', name: 'h2', version: '1.4.200' + implementation group: 'net.sourceforge.dynamicreports', name: 'dynamicreports-core', version: '6.12.1' + implementation group: 'org.simplejavamail', name: 'simple-java-mail', version: '8.1.0' + implementation group: 'com.formdev', name: 'flatlaf', version: '3.1.1' + implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1' + implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.7' + implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.4.7' +} + +project.configurations.implementation.setCanBeResolved(true) + +jar { + manifest { + attributes ( + 'Main-Class': 'Main', + 'Class-Path': configurations.implementation.collect { 'lib/' + it.name }.join(' ') + ) + } +} + +/* convenience tasks for working with a project */ + +tasks.register("copyDependencies", Copy) { + group = "Project"; + description = "Copy all dependencies into a 'libs' folder in the root of the project."; + + from configurations.implementation + into 'libs/' +} + +tasks.register("createMissingSourceDirs") { + group = "Project"; + description = "Create all of the missing source directories for this project."; + doFirst { + sourceSets.each { def sourceRoot -> + sourceRoot.allSource.srcDirTrees.each { def sourceDir -> + if(!sourceDir.dir.exists()) { + println "Creating ${sourceDir}"; + mkdir sourceDir.dir; + } + } + } + } +} + +tasks.register("deleteEmptySourceDirs") { + group = "Project"; + description = "Delete empty source directories."; + doFirst { + sourceSets.each { def sourceRoot -> + sourceRoot.allSource.srcDirTrees.each { def sourceDir -> + if(sourceDir.dir.exists() && sourceDir.dir.isDirectory() && sourceDir.dir.list().length == 0) { + println "Removing empty ${sourceDir}"; + sourceDir.dir.delete(); + } + } + } + } +} + +tasks.register("openProjectDir") { + group = "Project"; + description = "Open the project directory in the system file manager."; + doFirst { + println("Opening: " + file(projectDir)); + java.awt.Desktop.getDesktop().open(file(projectDir)); + } +} + +tasks.register("openBuildDir") { + group = "Project"; + description = "Open the project build directory in the system file manager."; + doFirst { + println("Opening: " + file(buildDir)); + java.awt.Desktop.getDesktop().open(file(buildDir)); + } +} + +tasks.register("createGitIgnore") { + group = "Project"; + description = "Create the project's .gitignore file."; + + def gitIgnored=""" + .gradle/ + .nb-gradle/ + .settings/ + nbproject/ + build/ + bin/ + dist/ + tmp/ + .classpath + .project + *.zip + *.tgz + *.tar.gz + *.class + *.jar + .DS_Store + !gradle-wrapper.jar + """; + + doLast { + def file = new File(projectDir, ".gitignore"); + if ( !file.exists() ) { + println("Creating .gitignore"); + + gitIgnored.lines().each { f -> + if(!f.trim().isBlank()) { + file.append(f.trim()+"\n"); + } + } + + } else { + println(".gitignore already exists"); + } + } +} +