@@ -10,22 +10,26 @@ package org.akhikhl.gradle.onejar
1010import org.gradle.api.Project
1111import org.gradle.api.artifacts.Configuration
1212import org.gradle.api.tasks.bundling.*
13+ import org.slf4j.Logger
14+ import org.slf4j.LoggerFactory
1315
1416class ProductConfigurator {
1517
18+ private static final Logger log = LoggerFactory . getLogger(ProductConfigurator )
19+
1620 private final Project project
1721 private final Map product
1822 private final String platform
1923 private final String arch
2024 private final String language
21- private final String productName
22- private final String productTaskSuffix
23- private final Configuration productConfig
24- private final Configuration providedConfig
25+ private final String productBaseFileName
26+ private final String productQualifiedFileName
2527 private final String outputBaseDir
2628 private final String outputDir
27- private final String baseName
2829 private final String destFile
30+ private final String productTaskSuffix
31+ private final Configuration productConfig
32+ private final Configuration providedConfig
2933 private final File mainJar
3034 private final List launchers
3135 private final String versionFileName
@@ -37,39 +41,31 @@ class ProductConfigurator {
3741 platform = product. platform
3842 arch = product. arch
3943 language = product. language
40- String productConfigName
41- if (product. name) {
42- productName = product. name
43- productConfigName = ' product_' + product. name
44- }
45- else {
46- String productName = project. name + ' -' + project. version
47- if (product. suffix)
48- productName + = ' -' + product. suffix
49- else {
50- if (platform)
51- productName + = ' -' + platform
52- if (arch)
53- productName + = ' -' + arch
54- if (language)
55- productName + = ' -' + language
56- }
57- this . productName = productName
58- productConfigName = ' product'
59- if (platform)
60- productConfigName + = ' _' + platform
61- if (arch)
62- productConfigName + = ' _' + arch
63- if (language)
64- productConfigName + = ' _' + language
65- }
44+
45+ productBaseFileName = product. name ?: project. name
46+
47+ String productFileSuffix
48+ if (product. fileSuffix)
49+ productFileSuffix = product. fileSuffix
50+ else
51+ productFileSuffix = [ product. suffix, platform, arch, language ]. findResults { it ?: null }. join(' -' )
52+
53+ productQualifiedFileName = [productBaseFileName, project. version, productFileSuffix]. findResults { it ?: null }. join(' -' )
54+
55+ outputBaseDir = " ${ project.buildDir} /output"
56+ outputDir = " ${ outputBaseDir} /${ productQualifiedFileName} "
57+ log. debug ' outputDir={}' , outputDir
58+
59+ destFile = " ${ outputDir} /${ productBaseFileName} .jar"
60+
61+ productTaskSuffix = [ product. name, product. suffix, platform, arch, language ]. findResults { it ?: null }. join(' _' )
62+
63+ String productConfigName = [ ' product' , product. configBaseName ?: product. name ?: ' ' , product. suffix, platform, arch, language ]. findResults { it ?: null }. join(' _' )
64+ log. debug ' product config: {}' , productConfigName
6665 productConfig = project. configurations. findByName(productConfigName)
66+
6767 providedConfig = project. configurations. findByName(' provided' )
68- this . productTaskSuffix = productConfigName
69- outputBaseDir = " ${ project.buildDir} /output"
70- outputDir = " ${ outputBaseDir} /${ productName} "
71- baseName = " ${ project.name} "
72- destFile = " ${ outputDir} /${ baseName} .jar"
68+
7369 mainJar = ProjectUtils . getMainJar(project)
7470 if (product. launchers)
7571 launchers = product. launchers
@@ -124,15 +120,17 @@ class ProductConfigurator {
124120 def archiveType = launchers. contains(' windows' ) ? Zip : Tar
125121
126122 project. task(" archive_${ productTaskSuffix} " , type : archiveType) {
127- from new File (outputDir)
128- into productName
123+
124+ archiveName = productQualifiedFileName + (archiveType == Tar ? ' .tar.gz ' : ' .zip ' )
129125 destinationDir = new File (outputBaseDir)
130- if (archiveType == Tar ) {
131- extension = ' tar.gz'
126+ if (archiveType == Tar )
132127 compression = Compression . GZIP
133- }
128+
129+ from new File (outputDir), { into productBaseFileName }
130+
134131 doLast {
135- ant. checksum file : it. archivePath
132+ project. logger. warn ' Created archive: {}' , archivePath
133+ ant. checksum file : archivePath
136134 }
137135 dependsOn " build_${ productTaskSuffix} "
138136 project. tasks. build. dependsOn it
@@ -152,10 +150,10 @@ class ProductConfigurator {
152150 outputs. file destFile
153151
154152 if (launchers. contains(' shell' ))
155- outputs. file(new File (" ${ outputDir} /${ baseName } .sh" ))
153+ outputs. file(new File (" ${ outputDir} /${ productBaseFileName } .sh" ))
156154
157155 if (launchers. contains(' windows' ))
158- outputs. file(new File (" ${ outputDir} /${ baseName } .bat" ))
156+ outputs. file(new File (" ${ outputDir} /${ productBaseFileName } .bat" ))
159157
160158 outputs. file versionFileName
161159
@@ -205,7 +203,7 @@ class ProductConfigurator {
205203 obj(product, outputDir)
206204 }
207205
208- project. logger. info ' Created one-jar: {}' , destFile
206+ project. logger. warn ' Created one-jar: {}' , destFile
209207 } // doLast
210208
211209 task. dependsOn project. tasks. assemble, project. tasks. check
@@ -263,12 +261,12 @@ class ProductConfigurator {
263261
264262 def params = []
265263 addCommonParams(params)
266- params. add(' -jar ${DIR}/' + baseName + ' .jar' )
264+ params. add(' -jar ${DIR}/' + productBaseFileName + ' .jar' )
267265 params. addAll(project. onejar. launchParameters)
268266 params. add(' "$@"' )
269267 params = params. join(' ' )
270268
271- def launchScriptFile = new File (" ${ outputDir} /${ baseName } .sh" )
269+ def launchScriptFile = new File (" ${ outputDir} /${ productBaseFileName } .sh" )
272270 launchScriptFile. text = ''' #!/bin/bash
273271SOURCE="${BASH_SOURCE[0]}"
274272while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
@@ -285,19 +283,19 @@ java ''' + params
285283
286284 def params = []
287285 addCommonParams(params)
288- params. add(' -jar %~dp0\\ ' + baseName + ' .jar' )
286+ params. add(' -jar %~dp0\\ ' + productBaseFileName + ' .jar' )
289287 params. addAll(project. onejar. launchParameters)
290288 params. add(' %*' )
291289 params = params. join(' ' )
292290
293- def launchScriptFile = new File (" ${ outputDir} /${ baseName } .bat" )
291+ def launchScriptFile = new File (" ${ outputDir} /${ productBaseFileName } .bat" )
294292 launchScriptFile. text = ' @java ' + params
295293 }
296294 }
297295
298296 private void generateVersionFile () {
299297 new File (versionFileName). text = """ \
300- product: ${ productName }
298+ product: ${ productBaseFileName }
301299version: ${ project.version}
302300platform: ${ platform ?: 'any'}
303301architecture: ${ arch ?: 'any'}
0 commit comments