ttcli icon indicating copy to clipboard operation
ttcli copied to clipboard

Error during initialization of a project

Open carlosduclosv opened this issue 10 months ago • 6 comments

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.

carlosduclosv avatar Jan 09 '25 09:01 carlosduclosv

Is there anything in the log file that ttcli generates?

wimdeblauwe avatar Jan 23 '25 09:01 wimdeblauwe

@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.

costalfy avatar Feb 22 '25 23:02 costalfy

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 ?

wimdeblauwe avatar Feb 26 '25 06:02 wimdeblauwe

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 ??

costalfy avatar Feb 28 '25 10:02 costalfy

I really have no clue. I don't see any exception logged in the output when you run npm run build.

wimdeblauwe avatar Feb 28 '25 14:02 wimdeblauwe

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.

vladdu avatar Apr 02 '25 17:04 vladdu

Is there anything I can do for this still? Can this be closed?

wimdeblauwe avatar Oct 29 '25 17:10 wimdeblauwe