build.gradle 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. plugins {
  2. id 'application'
  3. id 'pmd'
  4. id 'org.gradlex.reproducible-builds' version '1.0'
  5. id 'com.github.spotbugs' version '6.0.26'
  6. id 'io.github.sgtsilvio.gradle.proguard' version '0.7.0'
  7. }
  8. repositories {
  9. mavenCentral()
  10. }
  11. dependencies {
  12. spotbugs 'com.github.spotbugs:spotbugs:4.8.6'
  13. spotbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.6.8'
  14. proguardClasspath 'com.guardsquare:proguard-base:7.6.0'
  15. implementation 'com.google.guava:guava:33.3.1-jre'
  16. compileOnly 'com.github.spotbugs:spotbugs-annotations:4.8.6'
  17. }
  18. version = '1.0.0'
  19. pmd {
  20. consoleOutput = true
  21. toolVersion = '7.8.0'
  22. ruleSetFiles = files 'pmd.xml'
  23. }
  24. spotbugs {
  25. effort = com.github.spotbugs.snom.Effort.valueOf 'MAX'
  26. reportLevel = com.github.spotbugs.snom.Confidence.valueOf 'LOW'
  27. excludeFilter = file 'spotbugs-exclude.xml'
  28. }
  29. sourceSets {
  30. main {
  31. java.srcDirs = ['src']
  32. resources.srcDirs = ['resources']
  33. }
  34. }
  35. java {
  36. toolchain {
  37. languageVersion = JavaLanguageVersion.of 21
  38. }
  39. }
  40. application {
  41. mainClass = 'battleship.Entrypoint'
  42. }
  43. task fatJar(type: Jar) {
  44. dependsOn check
  45. from {
  46. configurations.runtimeClasspath.collect {
  47. (it.isDirectory() ? it : zipTree(it)).matching {
  48. exclude('META-INF/versions/**')
  49. exclude('META-INF/maven/**')
  50. exclude('META-INF/proguard/**') // not currently used, see https://github.com/Guardsquare/proguard/issues/337
  51. exclude('META-INF/LICENSE*')
  52. }
  53. }
  54. }
  55. manifest {
  56. attributes 'Main-Class' : application.mainClass
  57. }
  58. duplicatesStrategy = DuplicatesStrategy.FAIL
  59. includeEmptyDirs = false
  60. archiveClassifier = 'all-in-one'
  61. with jar
  62. }
  63. task proguardedJar(type: io.github.sgtsilvio.gradle.proguard.ProguardTask) {
  64. addInput {
  65. classpath.from(tasks.fatJar)
  66. }
  67. addOutput {
  68. archiveFile.set(base.libsDirectory.file("${project.name}-${project.version}-all-in-one-proguarded.jar"))
  69. }
  70. addLibrary {
  71. classpath.from(configurations.compileClasspath)
  72. }
  73. jdkModules.add 'java.base'
  74. jdkModules.add 'java.desktop'
  75. jdkModules.add 'java.logging'
  76. jdkModules.add 'java.datatransfer'
  77. rulesFiles.from file('battleship.pro')
  78. }