@@ -28,34 +28,26 @@ import org.apache.commons.compress.archivers.zip.ZipArchiveEntry
2828import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream
2929import org.apache.commons.compress.utils.IOUtils
3030import org.gradle.api.DefaultTask
31- import org.gradle.api.file.Directory
3231import org.gradle.api.file.DirectoryProperty
32+ import org.gradle.api.model.ObjectFactory
3333import org.gradle.api.provider.ListProperty
3434import org.gradle.api.provider.Property
35- import org.gradle.api.provider.Provider
3635import org.gradle.api.tasks.Input
37- import org.gradle.api.tasks.Internal
36+ import org.gradle.api.tasks.InputDirectory
3837import org.gradle.api.tasks.Optional
3938import org.gradle.api.tasks.TaskAction
4039import org.gradle.api.tasks.options.Option
4140import org.gradle.tooling.BuildException
4241import org.gradle.wrapper.Download
4342import org.gradle.wrapper.IDownload
4443import org.gradle.wrapper.Logger
45- import org.kordamp.gradle.property.DirectoryState
46- import org.kordamp.gradle.property.ListState
47- import org.kordamp.gradle.property.SimpleDirectoryState
48- import org.kordamp.gradle.property.SimpleListState
49- import org.kordamp.gradle.property.SimpleStringState
50- import org.kordamp.gradle.property.StringState
5144import org.zeroturnaround.exec.ProcessExecutor
5245import org.zeroturnaround.exec.ProcessResult
5346
47+ import javax.inject.Inject
5448import java.nio.file.Files
5549import java.nio.file.Path
5650
57- import static org.kordamp.gradle.util.StringUtils.isBlank
58-
5951/**
6052 * Run JBang with the specified parameters.
6153 *
@@ -64,28 +56,40 @@ import static org.kordamp.gradle.util.StringUtils.isBlank
6456@CompileStatic
6557class JBangTask extends DefaultTask {
6658 private static final boolean IS_OS_WINDOWS = System . getProperty(' os.name' )
67- .toLowerCase(Locale . ENGLISH )
68- .contains(' windows' )
59+ .toLowerCase(Locale . ENGLISH )
60+ .contains(' windows' )
6961
7062 private static final int OK_EXIT_CODE = 0
7163
72- private final StringState script
73- private final StringState version
74- private final ListState jbangArgs
75- private final ListState args
76- private final ListState trusts
77- private final DirectoryState installDir
64+ @Input
65+ final Property<String > script
66+ @Input
67+ @Optional
68+ final Property<String > version
69+ @Input
70+ @Optional
71+ final ListProperty<String > jbangArgs
72+ @Input
73+ @Optional
74+ final ListProperty<String > args
75+ @Input
76+ @Optional
77+ final ListProperty<String > trusts
78+ @InputDirectory
79+ @Optional
80+ final DirectoryProperty installDir
7881
79- JBangTask () {
82+ @Inject
83+ JBangTask (ObjectFactory objects ) {
8084 DirectoryProperty jbangCacheDirectory = project. objects. directoryProperty()
8185 jbangCacheDirectory. set(new File (project. gradle. gradleUserHomeDir, ' caches/jbang' ))
8286
83- script = SimpleStringState . of( this , ' jbang.script ' , ' ' )
84- version = SimpleStringState . of( this , ' jbang.version ' , ' latest' )
85- jbangArgs = SimpleListState . of( this , ' jbang.jbangArgs ' , [])
86- args = SimpleListState . of( this , ' jbang.args ' , [])
87- trusts = SimpleListState . of( this , ' jbang.trusts ' , [])
88- installDir = SimpleDirectoryState . of( this , ' jbang.install.dir ' , jbangCacheDirectory. get())
87+ script = objects . property( String ) . convention( ' ' )
88+ version = objects . property( String ) . convention( ' latest' )
89+ jbangArgs = objects . listProperty( String ) . convention( [])
90+ args = objects . listProperty( String ) . convention( [])
91+ trusts = objects . listProperty( String ) . convention( [])
92+ installDir = objects . directoryProperty() . convention( jbangCacheDirectory. get())
8993 }
9094
9195 @Option (option = ' jbang-script' , description = ' The script to be executed by JBang (REQUIRED).' )
@@ -113,80 +117,9 @@ class JBangTask extends DefaultTask {
113117 if (trusts) getTrusts(). set(trusts. split(' ,' ). toList())
114118 }
115119
116- // -- Write properties --
117-
118- @Internal
119- Property<String > getScript () {
120- script. property
121- }
122-
123- @Internal
124- Property<String > getVersion () {
125- version. property
126- }
127-
128- @Internal
129- ListProperty<String > getJbangArgs () {
130- jbangArgs. property
131- }
132-
133- @Internal
134- ListProperty<String > getArgs () {
135- args. property
136- }
137-
138- @Internal
139- ListProperty<String > getTrusts () {
140- trusts. property
141- }
142-
143- @Internal
144- DirectoryProperty getInstallDir () {
145- installDir. property
146- }
147-
148- // -- Read-only properties --
149-
150- @Input
151- Provider<String > getResolvedScript () {
152- script. provider
153- }
154-
155- @Input
156- @Optional
157- Provider<String > getResolvedVersion () {
158- version. provider
159- }
160-
161- @Input
162- @Optional
163- Provider<List<String > > getResolvedJbangArgs () {
164- jbangArgs. provider
165- }
166-
167- @Input
168- @Optional
169- Provider<List<String > > getResolvedArgs () {
170- args. provider
171- }
172-
173- @Input
174- @Optional
175- Provider<List<String > > getResolvedTrusts () {
176- trusts. provider
177- }
178-
179- @Input
180- @Optional
181- Provider<Directory > getResolvedInstallDir () {
182- installDir. provider
183- }
184-
185- // -- execution --
186-
187120 @TaskAction
188121 void runTask () {
189- if (isBlank(getResolvedScript() . getOrNull() )) {
122+ if (! script . getOrNull()) {
190123 throw new IllegalArgumentException (" A value for script must be defined" )
191124 }
192125
@@ -204,14 +137,14 @@ class JBangTask extends DefaultTask {
204137 if (result. getExitValue() == OK_EXIT_CODE ) {
205138 logger. info(' Found JBang v.' + result. outputString())
206139 } else {
207- String jbangVersion = getResolvedVersion() . get()
140+ String jbangVersion = version . get()
208141 logger. warn(' JBang not found. Checking cached version ' + jbangVersion)
209142
210143 if (' latest' == jbangVersion) {
211144 jbangVersion = resolveLatestVersion()
212145 }
213146
214- Path jbangInstallPath = getResolvedInstallDir() . get(). getAsFile(). toPath()
147+ Path jbangInstallPath = installDir . get(). getAsFile(). toPath()
215148 Path installDir = jbangInstallPath. toAbsolutePath()
216149 jbangHome = installDir. resolve(" jbang-${ jbangVersion} " . toString())
217150
@@ -230,7 +163,7 @@ class JBangTask extends DefaultTask {
230163 }
231164
232165 private void download (String jbangVersion ) {
233- Path jbangInstallPath = getResolvedInstallDir() . get(). getAsFile(). toPath()
166+ Path jbangInstallPath = installDir . get(). getAsFile(). toPath()
234167 Path installDir = jbangInstallPath. toAbsolutePath()
235168 String uri = String . format(' https://github.com/jbangdev/jbang/releases/download/v%s/jbang-%s.zip' , jbangVersion, jbangVersion)
236169
@@ -274,22 +207,22 @@ class JBangTask extends DefaultTask {
274207 command. add(findJBangExecutable() + ' version' )
275208 try {
276209 return new ProcessExecutor ()
277- .command(command)
278- .readOutput(true )
279- .destroyOnExit()
280- .execute()
210+ .command(command)
211+ .readOutput(true )
212+ .destroyOnExit()
213+ .execute()
281214 } catch (Exception e) {
282215 throw new BuildException (' Error while fetching the JBang version' , e)
283216 }
284217 }
285218
286219 private void executeTrust () {
287- if (! getResolvedTrusts() . get()) {
220+ if (! trusts . get()) {
288221 // No trust required
289222 return
290223 }
291224 List<String > command = command()
292- String trustCommand = findJBangExecutable() + ' trust add ' + String . join(' ' , getResolvedTrusts() . get())
225+ String trustCommand = findJBangExecutable() + ' trust add ' + String . join(' ' , trusts . get())
293226 command. add(trustCommand)
294227
295228 // Log the user-friendly trust command
@@ -307,13 +240,13 @@ class JBangTask extends DefaultTask {
307240 // A single string is needed, because if "sh -c jbang" is used for execution, the parameters need to be passed as single string
308241 StringBuilder executable = new StringBuilder (findJBangExecutable())
309242 executable. append(' run ' )
310- if (getResolvedJbangArgs() . get()) {
311- executable. append(' ' ). append(String . join(' ' , getResolvedJbangArgs() . get())). append(' ' )
243+ if (jbangArgs . get()) {
244+ executable. append(' ' ). append(String . join(' ' , jbangArgs . get())). append(' ' )
312245 }
313246
314- executable. append(getResolvedScript() . get())
315- if (getResolvedArgs() . get()) {
316- executable. append(' ' ). append(String . join(' ' , getResolvedArgs() . get()))
247+ executable. append(script . get())
248+ if (args . get()) {
249+ executable. append(' ' ). append(String . join(' ' , args . get()))
317250 }
318251
319252 command. add(executable. toString())
@@ -331,11 +264,11 @@ class JBangTask extends DefaultTask {
331264 logger. debug " Full command with shell wrapper: $command "
332265 try {
333266 return new ProcessExecutor ()
334- .command(command)
335- .redirectOutput(System . out)
336- .redirectError(System . err)
337- .destroyOnExit()
338- .execute()
267+ .command(command)
268+ .redirectOutput(System . out)
269+ .redirectError(System . err)
270+ .destroyOnExit()
271+ .execute()
339272 } catch (Exception e) {
340273 throw new BuildException (" Error while executing JBang" , e)
341274 }
0 commit comments