Maven从bash脚本忽略配置文件?

时间:2014-02-27 14:38:26

标签: java bash maven

我编写了一个小脚本来编译.jar的测试版本并将其放在我的测试服务器上。

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 myusername@666.666.666.666:/home/myusername/bin/td-daily-budget.jar

当我运行它时,我得到一个jar文件,其config.properties包含像

这样的东西

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

但是当我在终端窗口中单独运行 mvn -P test clean compile package 时,我得到一个与 test 配置文件放在一起的jar文件,例如: config.properties包含 db.connect.string = [我希望它对于dev配置文件] 。为什么在脚本中运行时,同一命令会忽略配置文件?

提前致谢!

[编辑/附录]

尝试将脚本行更改为 / bin / bash mvn -P env-test clean package (这是bash,而不是Windows,所以没有调用命令,但是使用bash调用另一个脚本似乎对我有意义了)但是刚刚获得

* 错误:无法找到或加载主类org.codehaus.plexus.classworlds.launcher.Launcher *

我认为将其称为外部流程会让Maven理解它应该在哪里执行。

[第二编辑/附录]

从命令中删除了多余的编译

现在看来,这实际上是一个间歇性的问题。当 mvn -P [几乎任何配置文件]干净软件包从bash脚本内部运行时,过滤几乎总是失败,但如果我从命令行中反复运行它将工作八九次,然后连续几次失败。我根本找不到任何模式。

一旦我发现这个,我就认为我知道罪魁祸首:每当看到文件发生变化时,Eclipse的m2e插件就会“帮助”我。所以我兴奋地关闭Eclipse认为问题会立即消失,连续几次运行 mvn -P env-test clean compile package - 它在前几次工作然后失败了。 / headdesk

[编辑/附录]

删除了 -P 和个人资料名称之间的空格。仍然没有运气。

2 个答案:

答案 0 :(得分:0)

我认为您需要使用“call”命令在批处理中运行mvn,所以就像:

call mvn -P test clean compile package

原因是,mvn本身就是一个批处理文件,因此需要使用“call”调用。

请试一试!

Bluddy

答案 1 :(得分:0)

您是否可以拥有与阶段同名的个人资料?尝试将“测试”配置文件重命名为“env-test”并使用:

mvn -P env-test clean package

编辑:

如果您认为它与从脚本中调用它有关,请尝试在顶部添加bash声明:

#!/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 myusername@666.666.666.666:/home/myusername/bin/td-daily-budget.jar

信用Bluddymarri建议等效的批处理脚本。