Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion docs/changes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
mainClass = "my.Main"
}
```
- Honor `executableDir` in `application` extension. ([#1738](https://github.com/GradleUp/shadow/pull/1738))
- Honor `executableDir` and `applicationName` in `application` extension. ([#1740](https://github.com/GradleUp/shadow/pull/1738))
This is useful when you want to customize the output directory of the start scripts and the application distribution.

### Changed

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,36 @@ class ApplicationPluginTest : BasePluginTest() {
}
}

@Test
fun honorApplicationExtensionProperties() {
val applicationNames = "new" to "new"
val executableDirs = "sbin" to "sbin"

prepare(
applicationBlock = """
applicationName = '${applicationNames.first}'
executableDir = '${executableDirs.first}'
""".trimIndent(),
)

run(installShadowDistPath, shadowDistZipPath)

assertThat(path("build/install/").walkEntries()).containsOnly(
"${applicationNames.second}-shadow/${executableDirs.second}/${applicationNames.second}",
"${applicationNames.second}-shadow/${executableDirs.second}/${applicationNames.second}.bat",
"${applicationNames.second}-shadow/lib/myapp-1.0-all.jar",
)
val zipPath = path("build/distributions/${applicationNames.second}-shadow-1.0.zip")
ZipFile(zipPath.toFile()).use { zip ->
val entries = zip.entries().toList().filter { !it.isDirectory }.map { it.name }
assertThat(entries).containsOnly(
"${applicationNames.second}-shadow-1.0/${executableDirs.second}/${applicationNames.second}",
"${applicationNames.second}-shadow-1.0/${executableDirs.second}/${applicationNames.second}.bat",
"${applicationNames.second}-shadow-1.0/lib/myapp-1.0-all.jar",
)
}
}

private fun prepare(
mainClassWithImports: Boolean = false,
projectBlock: String = "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
with(applicationExtension) {
task.mainModule.convention(mainModule)
task.mainClass.convention(mainClass)
task.jvmArguments.convention(provider { applicationDefaultJvmArgs })
task.jvmArguments.convention(provider(::getApplicationDefaultJvmArgs))
}
task.modularity.inferModulePath.convention(javaPluginExtension.modularity.inferModulePath)
task.javaLauncher.convention(javaToolchainService.launcherFor(javaPluginExtension.toolchain))
Expand Down Expand Up @@ -73,8 +73,8 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {

protected open fun Project.configureInstallTask() {
tasks.installShadowDist.configure { task ->
val applicationName = providers.provider { applicationExtension.applicationName }
val executableDir = providers.provider { applicationExtension.executableDir }
val applicationName = provider(applicationExtension::getApplicationName)
val executableDir = provider(applicationExtension::getExecutableDir)

task.doFirst("Check installation directory") {
val destinationDir = task.destinationDir
Expand All @@ -97,6 +97,13 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {

protected open fun Project.configureDistribution() {
distributions.register(DISTRIBUTION_NAME) {
it.distributionBaseName.convention(
provider {
// distributionBaseName defaults to `$project.name-$distribution.name`, applicationName defaults to project.name
// so we append the suffix to match the default distributionBaseName. Modified from `ApplicationPlugin.configureDistribution()`.
"${applicationExtension.applicationName}-$DISTRIBUTION_NAME"
},
)
it.contents { shadowDist ->
shadowDist.from(file("src/dist"))
shadowDist.into("lib") { lib ->
Expand All @@ -105,7 +112,7 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
lib.from(configurations.shadow)
}
// Defaults to bin dir.
shadowDist.into(applicationExtension.executableDir) { bin ->
shadowDist.into(provider(applicationExtension::getExecutableDir)) { bin ->
bin.from(tasks.startShadowScripts)
bin.filePermissions { permissions -> permissions.unix(UNIX_SCRIPT_PERMISSIONS) }
}
Expand Down