我编写了一个小脚本来编译.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 和个人资料名称之间的空格。仍然没有运气。
答案 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建议等效的批处理脚本。