MovingBlocks / Terasology

Terasology - open source voxel world
http://terasology.org
Apache License 2.0
3.67k stars 1.33k forks source link

`--args` overrides default arguments instead of appending them #4956

Open jdrueckert opened 2 years ago

jdrueckert commented 2 years ago

What you were trying to do

Start a headless server and override its default configuration.

./gradlew server --args="--override-default-config=override.cfg"

What actually happened

A headed Terasology game started.

How to reproduce

  1. Run ./gradlew server and notice that it starts a headless server
  2. Stop the headless server
  3. Run ./gradlew server --args="--override-default-config=override.cfg" and notice that it starts headed Terasology (main menu UI)
  4. Stop the game
  5. Run ./gradlew server --args="--override-default-config=override.cfg --headless" and notice that it starts a headless server

Workaround

Add --headless argument

./gradlew server --args="--override-default-config=override.cfg --headless"
keturn commented 2 years ago

One potential pitfall to look out for while addressing this:

If you do have --args always append to the gradle task's default args instead of replacing them, you get duplicates.

For example, gradlew game --args=--homedir=server would end up as

Terasology --homedir=. --homedir=server

at which point Terasology's argument processor (picocli) will complain that homedir can't be both . and server.

DarkWeird commented 2 years ago

@jdrueckert Oh it is my change #4916 But server didn't work before :D

@keturn Yeah. I already fix it in #4916. --homedir=. was from kotlin build script. --homedir=server was from server task

DarkWeird commented 2 years ago

Maybe better provide gradle's parameter there?

keturn commented 2 years ago

Which gradle parameter?

DarkWeird commented 2 years ago

Which gradle parameter?

create parameter Like -PadditionalArgs=..