Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deploy goal doesn't allow for user-specified <springBootApplication> config in server.xml; will always generate deployment config #1789

Open
scottkurz opened this issue Jan 26, 2024 · 1 comment

Comments

@scottkurz
Copy link
Member

scottkurz commented Jan 26, 2024

For a deployment of a SpringBoot packaged app, with liberty-maven-plugin config:

        <plugin>
           <groupId>io.openliberty.tools</groupId>
	   <artifactId>liberty-maven-plugin</artifactId>
	   <version>3.10</version>
           <configuration>
              <deployPackages>spring-boot-project</deployPackages>
           </configuration>

I can't specify server.xml config like:

     <springBootApplication location="my-0.0.1-SNAPSHOT.war" autoStart="false">
         <applicationArgument>--my.arg=123</applicationArgument>
    </springBootApplication>

The deploy will, by default, just go into dropins/spring unlike the deployment of regular (non-SB) WAR/EAR packages, in which the default path is calculated based on whether there is any app deployment configuration detected in server.xml config.

If I explicitly configure liberty-maven-plugin to use the 'apps' directory for deploy:

                       <appsDirectory>apps</appsDirectory>

it will always generate a config dropin. It will likewise not look for a springBootApplication at a matching location.

Though we have tests for each type of generated config, I don't think we test with explicitly-provided config in server.xml.

CONSEQUENCE

Depending on the values specified, this could surface with messages like:

[WARNING] CWWKM2179W: ...

OR

[INFO] [ERROR ] CWWKZ0013E: It is not possible to start two applications called ...

More directly, the config the user intends to set from the <springBootApplication> element https://openliberty.io/docs/latest/reference/config/springBootApplication.html won't take effect.

WORKAROUND

  1. Use this LMP config:
				<configuration>
					<appsDirectory>apps</appsDirectory>
					<deployPackages>spring-boot-project</deployPackages>
				</configuration>
  1. Do a mvn package liberty:create liberty:deploy just to generate the deployment configDropin.

  2. Take the generated config dropin and look at the contents, e.g. cat configDropins/defaults/install_apps_configuration_1491924271.xml to see something like:

<server>
    <springBootApplication id="spring-web-ee" location="thin-spring-web-ee-0.0.1-SNAPSHOT.war" name="spring-web-ee"/>
</server>
  1. Copy this element into server.xml and expand to add an end tag as well:
    <springBootApplication id="spring-web-ee" location="thin-spring-web-ee-0.0.1-SNAPSHOT.war" name="spring-web-ee">
   <!-- Now you can add the app args here -->
   </springBootApplication>

By matching the generated id, location and name in the explicit config in server.xml, we can cleanly merge over the config dropin-generated app config, and use what's specified in server.xml

PROPOSAL

It seems the most obvious thing is to follow the same pattern used for WAR/EAR deployment, as mentioned previously.

A couple other notes:

  1. we should consider honoring the liberty-maven-plugin <stripVersion>true</stripVersion> config.
  2. Some other context in this area to consider is the disucssion at: Confusing when user provides app config but plugin generates one anyway because of location mismatch #1780
@scottkurz
Copy link
Member Author

This issue to me suggests an idea I've considered now and again, which is to give 'deploy' its own special skipDeploy parm.

Besides perhaps working around this issue... it might be more generally useful dealing with SpringBoot since we have both the original WAR and SB plugin-repackaged WAR.

In the meantime we can always configure our own skip in the dev/run goals with:

              <execution>
                  <id>deploy-skip</id>
                       <phase>none</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </execution>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant