user3250532
user3250532

Reputation: 131

Maven run from bash script ignoring profile?

I wrote a little script to compile the test version of a .jar and put it out on my test server.

cd /home/myusername/workspace/td-daily-budget
mvn -P test clean compile package
scp /home/myusername/workspace/td-daily-budget/target/td-daily-budget-1.0.jar [email protected]:/home/myusername/bin/td-daily-budget.jar

When I run it I get a jar file whose config.properties contains things like

db.connect.string=${db.connect.string}

but when I run mvn -P test clean compile package all by itself in the terminal window I get a jar file put together with the test profile, e.g. config.properties contains db.connect.string=[what I expect it to be for the dev profile]. Why does the same command ignore the profile when run inside a script?

Thanks in advance!

[edit/addendum]

Tried changing the script line to /bin/bash mvn -P env-test clean package (it's bash, not Windows, so there's no call command, but using bash to call another script seems to make sense to me) but just got

*Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher *

I think calling it as an external process mucks up Maven's understanding of where it's supposed to be executing.

[2nd edit/addendum]

Removed the redundant compile from the command.

It now appears that this is actually an intermittent problem. The filtering almost always fails when mvn -P [pretty much ANY profile] clean package runs from inside the bash script, but if I run it standalone from the command line repeatedly it will work eight or nine times and then fail several times in a row. I cannot find any pattern to this at all.

As soon as I discovered this I thought I knew the culprit: The m2e plugin for Eclipse was "helping" me in the background every time it saw files changing. So I excitedly shutdown Eclipse thinking the problem would vanish instantly, ran mvn -P env-test clean compile package several times in a row--it worked the first few times and then failed. /headdesk

[edit/addendum]

Removed the space between the -P and the profile name. Still no luck.

Upvotes: 0

Views: 504

Answers (2)

davidfmatheson
davidfmatheson

Reputation: 3567

Are you allowed to have a profile with the same name as a phase? Try renaming your "test" profile to "env-test" and use:

mvn -P env-test clean package

EDIT:

If you believe it has to do with calling it from a script, try adding a bash declaration at the top:

#!/bin/bash
cd /home/myusername/workspace/td-daily-budget
mvn -P env-test clean package
scp /home/myusername/workspace/td-daily-budget/target/td-daily-budget-1.0.jar [email protected]:/home/myusername/bin/td-daily-budget.jar

Credit Bluddymarri for suggesting the batch script equivalent.

Upvotes: 0

Bluddymarri
Bluddymarri

Reputation: 333

I think you need to run the mvn in your batch with "call" command, so sth like:

call mvn -P test clean compile package

The reason is, that mvn is a batch file itself and thus needs to be invoked with "call".

Please give it a try!

Bluddy

Upvotes: 0

Related Questions