eirslett / frontend-maven-plugin

"Maven-node-grunt-gulp-npm-node-plugin to end all maven-node-grunt-gulp-npm-plugins." A Maven plugin that downloads/installs Node and NPM locally, runs NPM install, Grunt, Gulp and/or Karma.
Apache License 2.0
4.22k stars 868 forks source link

Error deleting file because in use by another process #1004

Open peterkronenberg opened 2 years ago

peterkronenberg commented 2 years ago

When I run a build, I sometimes get this error: Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:install-node-and-npm (install node and npm) on project demoIntegrate: Could not install Node: Unable to delete file: c:\project\target\node\tmp\node-v14.18.0-win-x64: c:\project\target\node\tmp\node-v14.18.0-win-x64\node_modules\npm\node_modules\iconv-lite\encodings: The process cannot access the file because it is being used by another process

The error is not always with the same file, although always something in the tmp directory

The error frequently happens after I just did a successful build. There is definitely no other process using this file. Sometimes, I can manually delete the target folder and then I can run it successfully.

What's even weirder is that it looks like it deletes the target directory (since I'm doing a mvn clean install)

[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ demoIntegrate --- [INFO] Deleting c:\project\target [INFO] [INFO] --- frontend-maven-plugin:1.12.0:install-node-and-npm (install node and npm) @ demoIntegrate --- [INFO] Installing node version v14.18.0 [INFO] Unpacking C:\Users\Peter\.m2\repository\com\github\eirslett\node\14.18.0\node-14.18.0-win-x64.zip into c:\project\target\node\tmp [INFO] Copying node binary from c:\project\target\node\tmp\node-v14.18.0-win-x64\node.exe to c:\project\target\node\node.exe

eirslett commented 2 years ago

Try not putting node inside the target directory. (I guess you tried to configure that as installDirectory?)

peterkronenberg commented 2 years ago

Yes, I was following some instructions to get React integrated with SpringBoot. Other than this problem, it works fine. Do you have any other suggestions for how to get Springboot to be able to serve the React files? I want the React Build files in the target directory, not necessarily the Node install

peterkronenberg commented 2 years ago

What my process is doing is running frontend-maven-plugin first, and then it uses maven-resources-plugin to copy files from the frontend build directory into the target directory (so that Spring can serve them). So there's no reason to build node in the target directory. So I changed to to creating node in the frontend-src-dir.

<configuration>
        <nodeVersion>${node.version}</nodeVersion>
        <workingDirectory>${frontend-src-dir}</workingDirectory>
        <installDirectory>${frontend-src-dir}</installDirectory>
 </configuration>

But I get a similar problem. So it has nothing to do with being in the target directory. Where ever I put the node files, it seems to have problems deleting them later

Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:install-node-and-npm (install node and npm) on project demoIntegrate: Could not install Node: Unable to delete file: E:\project\src\main\frontend\node\tmp\node-v14.18.0-win-x64: E:\project\src\main\frontend\node\tmp\node-v14.18.0-win-x64\node_modules\npm\node_modules: The process cannot access the file because it is being used by another process -> [Help 1]
eirslett commented 2 years ago

Then I have no idea what it can be... 🤷 I have never seen that error myself, and I also don't have access to a Windows computer. So let's hope somebody finds out!

Hm, maybe it's some kind of antivirus running on your computer, that tries to scan the downloaded tmp file? Could that be the "competing" process?

peterkronenberg commented 2 years ago

I'm pretty sure it's not that, although I can't prove it. Do you by any chance have any references to other documentation which shows the best way to integrate React with SpringBoot using the plugin? The best one I've found is https://dev.to/arpan_banerjee7/run-react-frontend-and-springboot-backend-on-the-same-port-and-package-them-as-a-single-artifact-14pa, but would love to get other ideas

eirslett commented 2 years ago

Try disabling the antivirus then! (Look at all antivirus-like processes running on the computer, and kill them)

For Spring Boot + React, you could try something like JHipster, which is more full-blown. https://www.jhipster.tech/