我有一个 Maven 项目。在 pom.xml
我将环境变量称为 ${env.MyProjectVersion}
.在构建项目之前,我从命令提示符设置了变量的值 ( export MyProjectVersion=1.0.0
)。构建成功,我将maven项目导入 eclipse 和 m2eclipse 尝试构建它失败:
Unable to download xyz-{$env.MyProjectVersion} dependency
eclipse 无法解析环境变量的值。有没有办法用eclipse指定环境变量值,以便它可以被eclipse中的maven插件选择。
最佳答案
显然 Eclipse Maven 插件在 Maven 构建期间忽略了环境变量。一种可能的解决方法(根据您的情况可能有效)是使用 settings.xml 中的属性。唯一的缺点是您必须将这些变量定义为环境变量,并在 settings.xml 中再次定义
在我的回答中,我描述了以下场景。
使用标准 maven 插件功能在 eclipse 中构建 Artifact ,并通过 maven 命令行额外构建相同的 Artifact 。
同样在命令行构建期间,我直接引用存储库文件夹
mvn -Dmaven.repo.local=/PATH_TO_M2_FOLDER/repository/-f parent.pom install
设置如下:
您必须在 pom.xml 中添加属性以充当环境变量的代理。
在命令行场景中,这些属性将直接填充。
在 Eclipse 场景中,属性必须由用户 settings.xml 通过定义配置文件来填充。
假设您有一个环境变量 $FOO 的属性。
在您的 maven settings.xml 中使用配置文件并定义 fooProperty。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
<profile>
<id>default</id>
<properties>
<fooProperty>bar</fooProperty >
</properties>
</profile>
</profiles>
...
<activeProfiles>
<activeProfile>default</activeProfile>
</activeProfiles>
</settings>
然后您只需将 Eclipse maven 插件指向您的用户设置。
要使 CLI 工作,您必须在 pom.xml 中再次定义 fooProperty:
${env.foo}
显然,eclipse maven 插件将 settings.xml 中的属性优先于 pom.xml 中的属性。不幸的是,我还没有想出一种通过环境变量在 settings.xml 中定义属性的方法。
在 pom.xml 中使用变量时,只使用代理属性,如下所示:
... ${fooProperty} ...
我在用
* Eclipse Mars:发布(4.5.0)
* 嵌入式 Maven:3.3.3/1.6.0.20150526-2031
* OSX El Capitan:10.11.4 (15E65)
关于eclipse - Maven - 如何从 Eclipse 引用环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632804/