frontend-maven-plugin icon indicating copy to clipboard operation
frontend-maven-plugin copied to clipboard

[Question]? Configuration is not read

Open eyp opened this issue 1 year ago • 1 comments

I'm trying just to run the install-node-and-npm goal. Following the example project, if I configure the plugin like this:

                    <plugin>
				<groupId>com.github.eirslett</groupId>
				<artifactId>frontend-maven-plugin</artifactId>
				<!-- Use the latest released version:
                https://repo1.maven.org/maven2/com/github/eirslett/frontend-maven-plugin/ -->
				<version>1.15.0</version>

				<executions>
					<execution>
						<id>install node and npm</id>
						<goals>
							<!-- mvn frontend:install-node-and-npm -->
							<goal>install-node-and-npm</goal>
						</goals>
						<configuration>
							<nodeVersion>v17.9.1</nodeVersion>
						</configuration>
					</execution>
				</executions>

			</plugin>

I get this error:

The parameters 'nodeVersion' for goal com.github.eirslett:frontend-maven-plugin:1.15.0:install-node-and-npm are missing or invalid

To avoid the issue and install the specified NodeJs version I need to move the configuration section outside the execution:

                      <plugin>
				<groupId>com.github.eirslett</groupId>
				<artifactId>frontend-maven-plugin</artifactId>
				<!-- Use the latest released version:
                https://repo1.maven.org/maven2/com/github/eirslett/frontend-maven-plugin/ -->
				<version>${frontend.maven.plugin.version}</version>

				<executions>
					<execution>
						<id>install node and npm</id>
						<goals>
							<!-- mvn frontend:install-node-and-npm -->
							<goal>install-node-and-npm</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<!-- See https://nodejs.org/en/download/ for latest node and npm (lts) versions -->
					<nodeVersion>v17.9.1</nodeVersion>
				</configuration>
			</plugin>

Also, I have a related problem with the other kind of goals like npm. It always does the default install command instead of reading the configuration I specified:

 mvn frontend:npm
<execution>
  <id>npm run eslint</id>
  <goals>
	<goal>npm</goal>
  </goals>
  <configuration>
	<arguments>run eslint</arguments>
  </configuration>
</execution>
[INFO] Running 'npm install' in ...

eyp avatar Jul 26 '24 12:07 eyp

I don't think this is purely and issue of the frontend plugin, but the way of how Maven works. A Maven build always consists of several phases (clean, compile, test-compile, test ..). Plugins may hook into those phases with several goals, like the compiler plugin attaching its compile goal to the compile phase and the testCompile goal to the test-compile phase.

Regarding the frontend plugin install-node-and-npm and npm are goals, that are bound to the generate-resources phase be default. So if you would call mvn generate-resources those goals would be executed. Adding an execution configuration could be used to bind these goals to another phase. Or offer additional configuration / execution steps for a certain goal.

By using or adding an execution step, you may rebind a goal to another phase. So instead of running the goal install-node-and-npm you could make it to be executed within the clean phase of maven. What the execution configuration do not do is overriding the configurations of a goal when calling it directly.

Calling mvn frontend:install-node-and-npm will indeed invoke this exact goal offered by the plugin. But Maven will not lookup the configuration within the exeuction elements but the default plugin configuration. So having a basic configuration like this would work:

<plugin>
  <groupId>com.github.eirslett</groupId>
  <artifactId>frontend-maven-plugin</artifactId>
  <version>1.15.0</version>
  <configuration>
    <nodeVersion>v17.9.1</nodeVersion>
  </configuration>
</plugin>

Changing the configuration of the plugin to this one:

<plugin>
  <groupId>com.github.eirslett</groupId>
  <artifactId>frontend-maven-plugin</artifactId>
  <version>1.15.0</version>
  <executions>
    <execution>
      <id>install node and npm</id>
      <goals>
        <goal>install-node-and-npm</goal>
      </goals>
      <configuration>
        <nodeVersion>v17.9.1</nodeVersion>
      </configuration>
    </execution>
  </executions>
</plugin>

will cause mvn frontend:install-node-and-npm to fail as the required nodeVersion is not configured for the direct invocation of the goal. If you would call it like mvn frontend:install-node-and-npm -DnodeVersion=v17.9.1 it would work again. Also calling mvn generate-resources would work, as the execution step would tell Maven "hey, if we are at the install-node-and-npm goal, consider this configuration". But what also would work, would be calling the install-node-and-npm with an explicit identifier (that's what the is for). mvn frontend:install-node-and-npm@"install node and npm" (quoted due to the whitespaces in the id) would call the goal with the configuration stated in the given execution element.

neoxpert avatar Aug 15 '24 09:08 neoxpert

Yes, I didn't mean it was an issue of the plugin (that's why I tagged it as a question). Thanks for the reply, it's useful.

eyp avatar Aug 26 '24 07:08 eyp