Skip to content

Commit 897ff1c

Browse files
committed
Add configuration option for target-specific resources
1 parent a3bd0e0 commit 897ff1c

File tree

4 files changed

+37
-7
lines changed

4 files changed

+37
-7
lines changed

src/main/java/org/gradlex/javamodule/packaging/JavaModulePackagingExtension.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.gradle.api.Action;
2020
import org.gradle.api.NamedDomainObjectContainer;
21+
import org.gradle.api.NamedDomainObjectSet;
2122
import org.gradle.api.NonNullApi;
2223
import org.gradle.api.Project;
2324
import org.gradle.api.Task;
@@ -115,6 +116,16 @@ public Target target(String label, Action<? super Target> action) {
115116
return target;
116117
}
117118

119+
/**
120+
* Configure all targets for the given OS.
121+
*/
122+
@SuppressWarnings("unused")
123+
public void targetsWithOs(String operatingSystem, Action<? super Target> action) {
124+
NamedDomainObjectSet<Target> matches = targets.matching(t ->
125+
t.getOperatingSystem().isPresent() && t.getOperatingSystem().get().equals(operatingSystem));
126+
matches.all(action);
127+
}
128+
118129
/**
119130
* Set a 'primary target'. Standard Gradle tasks that are not bound to a specific target – like 'assemble' – use
120131
* this 'primary target'.
@@ -138,6 +149,7 @@ public Target primaryTarget(Target target) {
138149
/**
139150
* Set a test suite to be 'multi-target'. This registers an additional 'test' task for each target.
140151
*/
152+
@SuppressWarnings({"unused", "UnstableApiUsage"})
141153
public TestSuite multiTargetTestSuite(TestSuite testSuite) {
142154
if (!(testSuite instanceof JvmTestSuite)) {
143155
return testSuite;
@@ -246,6 +258,7 @@ private void registerTargetSpecificTasks(Target target, String applicationJarTas
246258
t.getOptions().convention(target.getOptions());
247259
t.getPackageTypes().convention(target.getPackageTypes());
248260
t.getResources().from(getResources());
261+
t.getTargetResources().from(target.getTargetResources());
249262
t.getVerbose().convention(getVerbose());
250263

251264
t.getDestination().convention(getProject().getLayout().getBuildDirectory().dir("packages/" + target.getName()));
@@ -264,7 +277,7 @@ private void registerTargetSpecificTasks(Target target, String applicationJarTas
264277

265278
String targetAssembleLifecycle = "assemble" + capitalize(target.getName());
266279
if (!tasks.getNames().contains(targetAssembleLifecycle)) {
267-
TaskProvider<Task> lifecycleTask = tasks.register(targetAssembleLifecycle, t -> {
280+
tasks.register(targetAssembleLifecycle, t -> {
268281
t.setGroup(BUILD_GROUP);
269282
t.setDescription("Builds this project for " + target.getName());
270283
});

src/main/java/org/gradlex/javamodule/packaging/JavaModulePackagingPlugin.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,14 @@ public void apply(Project project) {
5050
javaModulePackaging.getJpackageResources().convention(project.provider(() ->
5151
project.getLayout().getProjectDirectory().dir(mainResources.getSrcDirs().iterator().next().getParent() + "/resourcesPackage")));
5252
javaModulePackaging.getVerbose().convention(false);
53+
54+
configureConventionsForCurrentHost();
55+
}
56+
57+
private void configureConventionsForCurrentHost() {
58+
// A few conveniences for local development
59+
60+
61+
5362
}
5463
}

src/main/java/org/gradlex/javamodule/packaging/model/Target.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.gradlex.javamodule.packaging.model;
1818

19+
import org.gradle.api.file.ConfigurableFileCollection;
1920
import org.gradle.api.provider.ListProperty;
2021
import org.gradle.api.provider.Property;
2122

@@ -31,6 +32,8 @@ abstract public class Target {
3132
abstract public ListProperty<String> getPackageTypes();
3233
abstract public ListProperty<String> getOptions();
3334

35+
abstract public ConfigurableFileCollection getTargetResources();
36+
3437
@Inject
3538
public Target(String name) {
3639
this.name = name;

src/main/java/org/gradlex/javamodule/packaging/tasks/Jpackage.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ abstract public class Jpackage extends DefaultTask {
8888
@PathSensitive(PathSensitivity.RELATIVE)
8989
abstract public ConfigurableFileCollection getResources();
9090

91+
@InputFiles
92+
@PathSensitive(PathSensitivity.RELATIVE)
93+
abstract public ConfigurableFileCollection getTargetResources();
94+
9195
@Input
9296
@Optional
9397
abstract public Property<String> getVendor();
@@ -193,19 +197,20 @@ public void runJpackage() throws Exception {
193197
});
194198

195199
File appImageFolder = requireNonNull(appImageParent.getAsFile().listFiles())[0];
196-
File appResourcesFolder;
200+
File appRootFolder;
197201
if (os.contains("macos")) {
198-
appResourcesFolder = new File(appImageFolder, "Contents/app");
202+
appRootFolder = new File(appImageFolder, "Contents");
199203
} else if (os.contains("windows")) {
200-
appResourcesFolder = new File(appImageFolder, "app");
204+
appRootFolder = appImageFolder;
201205
} else {
202-
appResourcesFolder = new File(appImageFolder, "lib/app");
206+
appRootFolder = new File(appImageFolder, "lib");
203207
}
204208

205209
// copy additional resource into app-image folder
206210
getFiles().copy(c -> {
207-
c.from(getResources());
208-
c.into(appResourcesFolder);
211+
c.into(appRootFolder);
212+
c.from(getTargetResources());
213+
c.from(getResources(), to -> to.into("app")); // 'app' is the folder Java loads resources from at runtime
209214
});
210215

211216
// package with additional resources

0 commit comments

Comments
 (0)