ttcli
ttcli copied to clipboard
Error during initialization of a project
carlos@ThinkPad-P1-Gen-4i-bcd3b680:~$ java -version
openjdk version "17.0.13" 2024-10-15
OpenJDK Runtime Environment Temurin-17.0.13+11 (build 17.0.13+11)
OpenJDK 64-Bit Server VM Temurin-17.0.13+11 (build 17.0.13+11, mixed mode, sharing)
carlos@ThinkPad-P1-Gen-4i-bcd3b680:~$ nvm --version
0.40.1
carlos@ThinkPad-P1-Gen-4i-bcd3b680:~$ nvm install --lts
Installing latest LTS version.
v22.13.0 is already installed.
Now using node v22.13.0 (npm v10.9.2)
carlos@ThinkPad-P1-Gen-4i-bcd3b680:~$ brew install ttcli
==> Downloading https://formulae.brew.sh/api/formula.jws.json
Warning: wimdeblauwe/ttcli/ttcli 1.6.2 is already installed and up-to-date.
To reinstall 1.6.2, run:
brew reinstall ttcli
carlos@ThinkPad-P1-Gen-4i-bcd3b680:~$ ttcli init
? Group: com.tamingthymeleaf
? Artifact: taming-thymeleaf
? Project Name: Taming Thymeleaf
? Select Spring Boot version 3.4.1
? Select live reload implementation: npm-based
? Web dependencies alpinejs,tailwind-css
? Tailwind dependencies forms
🍃 Generating Spring Boot project
🛠️ Using node v22.13.0 with npm 10.9.2
🔨 Installing npm dependencies
👷♂️ Adding npm build scripts
👷🏻♀️ Updating Maven pom.xml
❌ Error during project generation: Unable to format pom.xml
These are the contents of the generated folder:
carlos@ThinkPad-P1-Gen-4i-bcd3b680:~$ ls -l taming-thymeleaf/
total 324
-rw-rw-r-- 1 carlos carlos 1679 Jan 9 10:11 HELP.md
-rw-rw-r-- 1 carlos carlos 10665 Jan 9 10:11 mvnw
-rw-rw-r-- 1 carlos carlos 6912 Jan 9 10:11 mvnw.cmd
drwxrwxr-x 434 carlos carlos 20480 Jan 9 10:11 node_modules
-rw-rw-r-- 1 carlos carlos 2260 Jan 9 10:11 package.json
-rw-rw-r-- 1 carlos carlos 269169 Jan 9 10:11 package-lock.json
-rw-rw-r-- 1 carlos carlos 3961 Jan 9 10:11 pom.xml
-rw-rw-r-- 1 carlos carlos 444 Jan 9 10:11 postcss.config.js
drwxrwxr-x 4 carlos carlos 4096 Jan 9 10:11 src
Notice that no tailwind configuration is added, and if I try to build the project the build will fail because npm cannot build the project.
I can provide more information if needed.
Is there anything in the log file that ttcli generates?
@wimdeblauwe same error with the fresh 1.8.0 version when i select npm-base for live reload :
$ java -jar target/ttcli-1.9.0-SNAPSHOT.jar init
? Select Spring Boot project type: MAVEN
? Group: com.example
? Artifact: demo
? Project Name: Demo
? Select Spring Boot version 3.4.3
? Java version 23
? Select live reload implementation: dev-tools-based
? Web dependencies
🍃 Generating Spring Boot project
✅ Done generating project at /home/andy/Dev/ttcli/./demo
See HELP.md in the generated project for additional information.
andy@MacBookPro:~/Dev/ttcli$ java -jar target/ttcli-1.9.0-SNAPSHOT.jar init
? Select Spring Boot project type: MAVEN
? Group: com.example
? Artifact: demo
? Project Name: Demo
? Select Spring Boot version 3.4.3
? Java version 23
? Select live reload implementation: npm-based
? Web dependencies
🍃 Generating Spring Boot project
🛠️ Using node v22.14.0 with npm 10.9.2
🔨 Installing npm dependencies
👷♂️ Adding npm build scripts
👷🏻♀️ Updating Maven pom.xml
❌ Error during project generation: io.github.wimdeblauwe.ttcli.util.ExternalProcessException: Unable to run `npm run build`
> build
> npm-run-all --parallel build:*
> build:js
> path-exists src/main/resources/static/js && (mkdirp target/classes/static/js && babel src/main/resources/static/js/ --out-dir target/classes/static/js/) || echo "No 'src/main/resources/static/js' directory found."
> build:html
> recursive-copy "src/main/resources/templates" target/classes/templates -w
> build:css
> mkdirp target/classes/static/css && postcss src/main/resources/static/css/*.css -d target/classes/static/css
> build:svg
> path-exists src/main/resources/static/svg && recursive-copy "src/main/resources/static/svg" target/classes/static/svg -w -f "**/*.svg" || echo "No 'src/main/resources/static/svg' directory found."
No 'src/main/resources/static/js' directory found.
No 'src/main/resources/static/svg' directory found.
ERROR: "build:html" exited with 1.
andy@MacBookPro:~/Dev/ttcli$ java -jar target/ttcli-1.9.0-SNAPSHOT.jar init
? Select Spring Boot project type: MAVEN
? Group: com.example
? Artifact: demo
? Project Name: Demo
? Select Spring Boot version 3.4.3
? Java version 23
? Select live reload implementation: npm-based
? Web dependencies
🍃 Generating Spring Boot project
🛠️ Using node v22.14.0 with npm 10.9.2
🔨 Installing npm dependencies
👷♂️ Adding npm build scripts
👷🏻♀️ Updating Maven pom.xml
❌ Error during project generation: io.github.wimdeblauwe.ttcli.util.ExternalProcessException: Unable to run `npm run build`
> build
> npm-run-all --parallel build:*
> build:html
> recursive-copy "src/main/resources/templates" target/classes/templates -w
> build:css
> mkdirp target/classes/static/css && postcss src/main/resources/static/css/*.css -d target/classes/static/css
> build:js
> path-exists src/main/resources/static/js && (mkdirp target/classes/static/js && babel src/main/resources/static/js/ --out-dir target/classes/static/js/) || echo "No 'src/main/resources/static/js' directory found."
> build:svg
> path-exists src/main/resources/static/svg && recursive-copy "src/main/resources/static/svg" target/classes/static/svg -w -f "**/*.svg" || echo "No 'src/main/resources/static/svg' directory found."
No 'src/main/resources/static/js' directory found.
No 'src/main/resources/static/svg' directory found.
ERROR: "build:html" exited with 1.
and the ttcli.log :
2025-02-23T00:25:15.632+01:00 INFO 14699 --- [main] i.g.w.t.TamingThymeleafCliApplication : Starting TamingThymeleafCliApplication v1.9.0-SNAPSHOT using Java 23.0.1 with PID 14699 (/home/andy/Dev/ttcli/target/ttcli-1.9.0-SNAPSHOT.jar started by andy in /home/andy/Dev/ttcli)
2025-02-23T00:25:15.636+01:00 INFO 14699 --- [main] i.g.w.t.TamingThymeleafCliApplication : No active profile set, falling back to 1 default profile: "default"
2025-02-23T00:25:18.696+01:00 INFO 14699 --- [main] i.g.w.t.TamingThymeleafCliApplication : Started TamingThymeleafCliApplication in 4.065 seconds (process running for 5.107)
2025-02-23T00:25:30.906+01:00 INFO 14699 --- [main] i.g.w.t.ProjectInitializationService : Using init service io.github.wimdeblauwe.ttcli.livereload.npm.NpmBasedLiveReloadInitService@7601bc96
2025-02-23T00:25:48.105+01:00 ERROR 14699 --- [main] io.github.wimdeblauwe.ttcli.Init : Error during project generation: io.github.wimdeblauwe.ttcli.util.ExternalProcessException: Unable to run `npm run build`
> build
> npm-run-all --parallel build:*
> build:html
> recursive-copy "src/main/resources/templates" target/classes/templates -w
> build:css
> mkdirp target/classes/static/css && postcss src/main/resources/static/css/*.css -d target/classes/static/css
> build:js
> path-exists src/main/resources/static/js && (mkdirp target/classes/static/js && babel src/main/resources/static/js/ --out-dir target/classes/static/js/) || echo "No 'src/main/resources/static/js' directory found."
> build:svg
> path-exists src/main/resources/static/svg && recursive-copy "src/main/resources/static/svg" target/classes/static/svg -w -f "**/*.svg" || echo "No 'src/main/resources/static/svg' directory found."
No 'src/main/resources/static/js' directory found.
No 'src/main/resources/static/svg' directory found.
ERROR: "build:html" exited with 1.
io.github.wimdeblauwe.ttcli.livereload.LiveReloadInitServiceException: io.github.wimdeblauwe.ttcli.util.ExternalProcessException: Unable to run `npm run build`
> build
> npm-run-all --parallel build:*
> build:html
> recursive-copy "src/main/resources/templates" target/classes/templates -w
> build:css
> mkdirp target/classes/static/css && postcss src/main/resources/static/css/*.css -d target/classes/static/css
> build:js
> path-exists src/main/resources/static/js && (mkdirp target/classes/static/js && babel src/main/resources/static/js/ --out-dir target/classes/static/js/) || echo "No 'src/main/resources/static/js' directory found."
> build:svg
> path-exists src/main/resources/static/svg && recursive-copy "src/main/resources/static/svg" target/classes/static/svg -w -f "**/*.svg" || echo "No 'src/main/resources/static/svg' directory found."
No 'src/main/resources/static/js' directory found.
No 'src/main/resources/static/svg' directory found.
ERROR: "build:html" exited with 1.
at io.github.wimdeblauwe.ttcli.livereload.npm.NpmBasedLiveReloadInitService.runBuild(NpmBasedLiveReloadInitService.java:99) ~[!/:1.9.0-SNAPSHOT]
at io.github.wimdeblauwe.ttcli.ProjectInitializationService.initialize(ProjectInitializationService.java:75) ~[!/:1.9.0-SNAPSHOT]
at io.github.wimdeblauwe.ttcli.Init.init(Init.java:79) ~[!/:1.9.0-SNAPSHOT]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.shell.command.invocation.InvocableShellMethod.doInvoke(InvocableShellMethod.java:306) ~[spring-shell-core-3.4.0.jar!/:3.4.0]
at org.springframework.shell.command.invocation.InvocableShellMethod.invoke(InvocableShellMethod.java:232) ~[spring-shell-core-3.4.0.jar!/:3.4.0]
at org.springframework.shell.command.CommandExecution$DefaultCommandExecution.evaluate(CommandExecution.java:230) ~[spring-shell-core-3.4.0.jar!/:3.4.0]
at org.springframework.shell.Shell.evaluate(Shell.java:248) ~[spring-shell-core-3.4.0.jar!/:3.4.0]
at org.springframework.shell.Shell.run(Shell.java:159) ~[spring-shell-core-3.4.0.jar!/:3.4.0]
at org.springframework.shell.jline.NonInteractiveShellRunner.run(NonInteractiveShellRunner.java:144) ~[spring-shell-core-3.4.0.jar!/:3.4.0]
at org.springframework.shell.DefaultShellApplicationRunner.run(DefaultShellApplicationRunner.java:66) ~[spring-shell-core-3.4.0.jar!/:3.4.0]
at org.springframework.boot.SpringApplication.lambda$callRunner$4(SpringApplication.java:784) ~[spring-boot-3.4.2.jar!/:3.4.2]
at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:82) ~[spring-core-6.2.2.jar!/:6.2.2]
at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60) ~[spring-core-6.2.2.jar!/:6.2.2]
at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:86) ~[spring-core-6.2.2.jar!/:6.2.2]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:796) ~[spring-boot-3.4.2.jar!/:3.4.2]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784) ~[spring-boot-3.4.2.jar!/:3.4.2]
at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:772) ~[spring-boot-3.4.2.jar!/:3.4.2]
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:na]
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:571) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na]
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:na]
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:636) ~[na:na]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:772) ~[spring-boot-3.4.2.jar!/:3.4.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) ~[spring-boot-3.4.2.jar!/:3.4.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) ~[spring-boot-3.4.2.jar!/:3.4.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) ~[spring-boot-3.4.2.jar!/:3.4.2]
at io.github.wimdeblauwe.ttcli.TamingThymeleafCliApplication.main(TamingThymeleafCliApplication.java:10) ~[!/:1.9.0-SNAPSHOT]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102) ~[ttcli-1.9.0-SNAPSHOT.jar:1.9.0-SNAPSHOT]
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64) ~[ttcli-1.9.0-SNAPSHOT.jar:1.9.0-SNAPSHOT]
at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40) ~[ttcli-1.9.0-SNAPSHOT.jar:1.9.0-SNAPSHOT]
Caused by: io.github.wimdeblauwe.ttcli.util.ExternalProcessException: Unable to run `npm run build`
> build
> npm-run-all --parallel build:*
> build:html
> recursive-copy "src/main/resources/templates" target/classes/templates -w
> build:css
> mkdirp target/classes/static/css && postcss src/main/resources/static/css/*.css -d target/classes/static/css
> build:js
> path-exists src/main/resources/static/js && (mkdirp target/classes/static/js && babel src/main/resources/static/js/ --out-dir target/classes/static/js/) || echo "No 'src/main/resources/static/js' directory found."
> build:svg
> path-exists src/main/resources/static/svg && recursive-copy "src/main/resources/static/svg" target/classes/static/svg -w -f "**/*.svg" || echo "No 'src/main/resources/static/svg' directory found."
No 'src/main/resources/static/js' directory found.
No 'src/main/resources/static/svg' directory found.
ERROR: "build:html" exited with 1.
at io.github.wimdeblauwe.ttcli.util.ExternalProcessRunner.run(ExternalProcessRunner.java:33) ~[!/:1.9.0-SNAPSHOT]
at io.github.wimdeblauwe.ttcli.livereload.npm.NpmBasedLiveReloadInitService.runBuild(NpmBasedLiveReloadInitService.java:95) ~[!/:1.9.0-SNAPSHOT]
... 36 common frames omitted
running on ubuntu 22.04 with Openjdk GraalVM CE 23.0.1
FYI if i choose Vite or devtools, ttcli works fine! This issue is only for npm-base live reload.
That is weird. Can you try to manually run npm run build in the generated directory after the error happens to see if there is more output on what exactly might be the issue ?
ok, this is the error after npm run build in the generated project :
$ npm run build
> build
> npm-run-all --parallel build:*
> build:js
> path-exists src/main/resources/static/js && (mkdirp target/classes/static/js && babel src/main/resources/static/js/ --out-dir target/classes/static/js/) || echo "No 'src/main/resources/static/js' directory found."
> build:html
> recursive-copy "src/main/resources/templates" target/classes/templates -w
> build:css
> mkdirp target/classes/static/css && postcss src/main/resources/static/css/*.css -d target/classes/static/css
> build:svg
> path-exists src/main/resources/static/svg && recursive-copy "src/main/resources/static/svg" target/classes/static/svg -w -f "**/*.svg" || echo "No 'src/main/resources/static/svg' directory found."
No 'src/main/resources/static/svg' directory found.
⠙No 'src/main/resources/static/js' directory found.
src/main/resources/templates -> target/classes/templates
src/main/resources/templates/layout -> target/classes/templates/layout
src/main/resources/templates/index.html -> target/classes/templates/index.html
src/main/resources/templates/layout/main.html -> target/classes/templates/layout/main.html
4 item(s) copied
I try on another computer (archlinux) with node 22.14.0 and npm 11.1.0 without any error.
Maybe it's a NPM issue ??
I really have no clue. I don't see any exception logged in the output when you run npm run build.
I created https://github.com/wimdeblauwe/ttcli/pull/208 to print out the exception message from ExternalProcessRunner, so that it's easier to understand what was wrong.
In my case, I did not have mvn installed, I relied on the one embedded in IntelliJ.
Is there anything I can do for this still? Can this be closed?