aboutsummaryrefslogtreecommitdiff
path: root/Занимательное программирование/4/5_3d/build.gradle
blob: 227467c9410e4142b0eae39bea779c6665320424 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
buildscript {
}
plugins {
  id "application"
}
apply plugin: 'java-library'

// From https://lyze.dev/2021/04/29/libGDX-Internal-Assets-List/
// The article can be helpful when using assets.txt in your project.
tasks.register('generateAssetList') {
  inputs.dir("${project.rootDir}/assets/")
  // projectFolder/assets
  File assetsFolder = new File("${project.rootDir}/assets/")
  // projectFolder/assets/assets.txt
  File assetsFile = new File(assetsFolder, "assets.txt")
  // delete that file in case we've already created it
  assetsFile.delete()

  // iterate through all files inside that folder
  // convert it to a relative path
  // and append it to the file assets.txt
  fileTree(assetsFolder).collect { assetsFolder.relativePath(it) }.sort().each {
    assetsFile.append(it + "\n")
  }
}
processResources.dependsOn 'generateAssetList'

compileJava {
  options.incremental = true
}

version = "$projectVersion"
ext.appName = 'Labyrinth'
repositories {
  mavenCentral()
  // You may want to remove the following line if you have errors downloading dependencies.
  mavenLocal()
  maven { url = 'https://central.sonatype.com/repository/maven-snapshots/' }
  maven { url = 'https://jitpack.io' }
}

[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

sourceSets.main.resources.srcDirs += [ rootProject.file('assets').path ]
application.mainClass = 'net.caraus.labyrinth.lwjgl3.Lwjgl3Launcher'

java.sourceCompatibility = 17
java.targetCompatibility = 21
if (JavaVersion.current().isJava9Compatible()) {
        compileJava.options.release.set(17)
}

dependencies {
  api "com.badlogicgames.gdx:gdx:$gdxVersion"
  implementation "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
  implementation "com.badlogicgames.gdx:gdx-lwjgl3-angle:$gdxVersion"
  implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
}

def os = System.properties['os.name'].toLowerCase(Locale.ROOT)

run {
  workingDir = rootProject.file('assets').path

  if (os.contains('mac')) jvmArgs += "-XstartOnFirstThread"
}

jar {
  // sets the name of the .jar file this produces to the name of the game or app, with the version after.
  archiveFileName.set("${appName}-${projectVersion}.jar")
  // the duplicatesStrategy matters starting in Gradle 7.0; this setting works.
  duplicatesStrategy = DuplicatesStrategy.EXCLUDE
  dependsOn configurations.runtimeClasspath
  from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
  // these "exclude" lines remove some unnecessary duplicate files in the output JAR.
  exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA')
  dependencies {
    exclude('META-INF/INDEX.LIST', 'META-INF/maven/**')
  }
  // setting the manifest makes the JAR runnable.
  // enabling native access helps avoid a warning when Java 24 or later runs the JAR.
  manifest {
    attributes 'Main-Class': application.mainClass, 'Enable-Native-Access': 'ALL-UNNAMED'
  }
  // this last step may help on some OSes that need extra instruction to make runnable JARs.
  doLast {
    file(archiveFile).setExecutable(true, false)
  }
}

// Builds a JAR that only includes the files needed to run on macOS, not Windows or Linux.
// The file size for a Mac-only JAR is about 7MB smaller than a cross-platform JAR.
tasks.register("jarMac") {
  dependsOn("jar")
  group("build")
  jar.archiveFileName.set("${appName}-${projectVersion}-mac.jar")
  jar.exclude("windows/x86/**", "windows/x64/**", "linux/arm32/**", "linux/arm64/**", "linux/x64/**", "**/*.dll", "**/*.so",
    'META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA')
  dependencies {
    jar.exclude("windows/x86/**", "windows/x64/**", "linux/arm32/**", "linux/arm64/**", "linux/x64/**",
      'META-INF/INDEX.LIST', 'META-INF/maven/**')
  }
}

// Builds a JAR that only includes the files needed to run on Linux, not Windows or macOS.
// The file size for a Linux-only JAR is about 5MB smaller than a cross-platform JAR.
tasks.register("jarLinux") {
  dependsOn("jar")
  group("build")
  jar.archiveFileName.set("${appName}-${projectVersion}-linux.jar")
  jar.exclude("windows/x86/**", "windows/x64/**", "macos/arm64/**", "macos/x64/**", "**/*.dll", "**/*.dylib",
    'META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA')
  dependencies {
    jar.exclude("windows/x86/**", "windows/x64/**", "macos/arm64/**", "macos/x64/**",
      'META-INF/INDEX.LIST', 'META-INF/maven/**')
  }
}

// Builds a JAR that only includes the files needed to run on Windows, not Linux or macOS.
// The file size for a Windows-only JAR is about 6MB smaller than a cross-platform JAR.
tasks.register("jarWin") {
  dependsOn("jar")
  group("build")
  jar.archiveFileName.set("${appName}-${projectVersion}-win.jar")
  jar.exclude("macos/arm64/**", "macos/x64/**", "linux/arm32/**", "linux/arm64/**", "linux/x64/**", "**/*.dylib", "**/*.so",
    'META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA')
  dependencies {
    jar.exclude("macos/arm64/**", "macos/x64/**", "linux/arm32/**", "linux/arm64/**", "linux/x64/**",
      'META-INF/INDEX.LIST', 'META-INF/maven/**')
  }
}

distributions {
  main {
    contents {
      into('libs') {
        project.configurations.runtimeClasspath.files.findAll { file ->
          file.getName() != project.tasks.jar.outputs.files.singleFile.name
        }.each { file ->
          exclude file.name
        }
      }
    }
  }
}

startScripts.dependsOn(':lwjgl3:jar')
startScripts.classpath = project.tasks.jar.outputs.files