11import de.itemis.mps.gradle.*
22import de.itemis.mps.gradle.tasks.*
33import de.itemis.mps.gradle.downloadJBR.DownloadJbrForPlatform
4+ import groovy.transform.TupleConstructor
45import groovy.xml.XmlSlurper
56import java.time.LocalDate
67import java.time.format.DateTimeFormatter
@@ -94,17 +95,24 @@ ext.snapshotRepository = 'https://artifacts.itemis.cloud/repository/maven-mps-sn
9495ext. publishingRepository = version. toString(). endsWith(" -SNAPSHOT" ) ? snapshotRepository : releaseRepository
9596
9697
98+ def buildDirPath (pathUnderBuildDir ) {
99+ project. layout. buildDirectory. dir(pathUnderBuildDir). get(). asFile
100+ }
97101
98102// 'artifacts' is used in the generated ant scripts as build output directory
99- ext. artifactsDir = new File (buildDir, ' artifacts' )
103+ ext. artifactsDir = buildDirPath(' artifacts' )
104+ ext. reportsDir = buildDirPath(' reports' )
105+
106+ wrapper {
107+ gradleVersion ' 8.13'
108+ distributionType Wrapper.DistributionType . ALL
109+ }
100110
101111configurations {
102112 mps
103113 rerunMigrationsBackend
104114 languageLibs
105115 junitAnt
106- pcollections // Synced to org.iets3.core.expr.base.collections.stubs/lib
107- bigMath // Synced to org.iets3.core.expr.math.interpreter/lib
108116}
109117
110118dependencies {
@@ -115,8 +123,62 @@ dependencies {
115123 languageLibs " org.mpsqa:all-in-one:$mpsQAVersion "
116124 languageLibs " com.mbeddr:platform:$mbeddrVersion "
117125 junitAnt ' org.apache.ant:ant-junit:1.10.15'
118- pcollections ' org.pcollections:pcollections:4.0.2'
119- bigMath ' ch.obermuhlner:big-math:2.3.2'
126+ }
127+
128+ @TupleConstructor
129+ class BundledDep {
130+ String name
131+ List<String > entries
132+ String libSolutionName
133+ Closure configClosure = { transitive = false }
134+ // in case a legacy dependency has a broken artifact name, e.g. w/o extension
135+ String jarNameOverride
136+ String getConfigName () {
137+ name + ' _bundled'
138+ }
139+ String getResolveTaskName () {
140+ ' resolve_' + this . configName
141+ }
142+ BundledDep overrideArtifactName (String artifactName ) {
143+ this . jarNameOverride = artifactName
144+ this
145+ }
146+ }
147+
148+ def bundledDeps = [
149+ new BundledDep (' pcollections' , [' org.pcollections:pcollections:4.0.2' ], ' org.iets3.core.expr.base.collections.stubs' ),
150+ new BundledDep (' bigMath' , [' ch.obermuhlner:big-math:2.3.2' ], ' org.iets3.core.expr.math.interpreter' ),
151+ new BundledDep (' functionalJava' , [' org.functionaljava:functionaljava:5.0' ], ' org.iets3.core.expr.genjava.functionalJava' ),
152+ new BundledDep (' cpsSuite' , [' io.takari.junit:takari-cpsuite:1.2.7' ], ' org.iets3.opensource.build.gentests.rt' ). overrideArtifactName(' takari-cpsuite.jar' )
153+ ]
154+
155+ bundledDeps. each { dep ->
156+ configurations {
157+ create(dep. configName)
158+ }
159+ dependencies {
160+ dep. entries. each {entry ->
161+ add(dep. configName, entry, dep. configClosure)
162+ }
163+ }
164+ tasks. create(dep. resolveTaskName, Sync . class) {
165+ from configurations. getByName(dep. configName)
166+ into file(" code/languages/org.iets3.opensource/solutions/${ dep.libSolutionName} /lib" )
167+
168+ // Strip version numbers from file names
169+ rename { filename ->
170+ def ra = configurations. getByName(dep. configName). resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
171+ String finalName
172+ if (dep. jarNameOverride != null ) {
173+ finalName = dep. jarNameOverride
174+ } else if (ra. classifier != null ) {
175+ finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
176+ } else {
177+ finalName = " ${ ra.name} .${ ra.extension} "
178+ }
179+ return finalName
180+ }
181+ }
120182}
121183
122184
@@ -135,41 +197,8 @@ task resolveLanguageLibs(type: Sync) {
135197 into " $buildDir /dependencies"
136198}
137199
138- task resolvePcollections (type : Sync ) {
139- from configurations. pcollections
140- into file(' code/languages/org.iets3.opensource/solutions/org.iets3.core.expr.base.collections.stubs/lib' )
141-
142- // Strip version numbers from file names
143- rename { filename ->
144- def ra = configurations. pcollections. resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
145- String finalName
146- if (ra. classifier != null ) {
147- finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
148- } else {
149- finalName = " ${ ra.name} .${ ra.extension} "
150- }
151- return finalName
152- }
153- }
154-
155- task resolveBigMath (type : Sync ) {
156- from configurations. bigMath
157- into file(' code/languages/org.iets3.opensource/solutions/org.iets3.core.expr.math.interpreter/lib' )
158-
159- // Strip version numbers from file names
160- rename { filename ->
161- def ra = configurations. bigMath. resolvedConfiguration. resolvedArtifacts. find { ResolvedArtifact ra -> ra. file. name == filename }
162- String finalName
163- if (ra. classifier != null ) {
164- finalName = " ${ ra.name} -${ ra.classifier} .${ ra.extension} "
165- } else {
166- finalName = " ${ ra.name} .${ ra.extension} "
167- }
168- return finalName
169- }
170- }
171-
172- task resolveDependencies (dependsOn : [' downloadJbr' , resolveMps, resolveLanguageLibs, resolvePcollections, resolveBigMath])
200+ task resolveDependencies (dependsOn : [' downloadJbr' , resolveMps, resolveLanguageLibs])
201+ resolveDependencies. dependsOn << bundledDeps. collect {it. resolveTaskName }
173202
174203ext. mpsHomeDir = resolveMps. destinationDir
175204
@@ -318,10 +347,14 @@ afterEvaluate { project ->
318347}
319348
320349
321- task packageLanguages (type : Zip , dependsOn : buildLanguages) {
350+ task packageLanguages (type : Zip , dependsOn : [ buildLanguages, cyclonedxBom] ) {
322351 archiveBaseName = ' org.iets3.opensource'
323- from artifactsDir
324- include ' org.iets3.opensource/**'
352+ from(artifactsDir) {
353+ include ' org.iets3.opensource/**'
354+ }
355+ from(reportsDir) {
356+ include ' sbom.json'
357+ }
325358}
326359
327360task packageTests (type : Zip , dependsOn : buildAndRunTests) {
@@ -539,15 +572,11 @@ tasks.named('githubRelease').configure {
539572
540573cyclonedxBom {
541574 // SBOM destination directory
542- destination = file( " build/reports " )
575+ destination = reportsDir
543576 // The file name for the generated SBOMs (before the file format suffix)
544577 outputName = " sbom"
545578 // The file format generated, can be xml, json or all for generating both
546579 outputFormat = " json"
547580 // Don't include license texts in generated SBOMs
548581 includeLicenseText = false
549582}
550-
551- assemble {
552- dependsOn(' cyclonedxBom' )
553- }
0 commit comments