从 Gradle 设置环境变量

发布于 2024-12-25 14:10:00 字数 230 浏览 0 评论 0 原文

我需要从 Gradle 执行一个依赖于环境变量的 Ant 脚本。 Ant 使用 来实现。

我尝试在 Gradle 中执行 env.foo="bar" ,但它引发了 Groovy 异常。

将环境变量从 Gradle 传递到 Ant 的正确方法是什么?

I need to execute from Gradle an Ant script which relies on environment variables.
Ant uses <property environment="env"/> for it.

I tried to do env.foo="bar" in Gradle, but it throws a Groovy exception.

What is the proper way to pass environment variables from Gradle to Ant?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

罪歌 2025-01-01 14:10:00

gradle 2.0 文档,我看到类似的内容这是可能的

test {
  environment "LD_LIBRARY_PATH", "lib"
}

或者在这种情况下可以使用这个

systemProperty "java.library.path", "lib"

From the gradle 2.0 docs, i see something like this is possible

test {
  environment "LD_LIBRARY_PATH", "lib"
}

Or in this case could use this

systemProperty "java.library.path", "lib"
も让我眼熟你 2025-01-01 14:10:00

一般来说,从 Gradle 或 JVM 中设置环境变量是不可能的,但可以像这样欺骗 Ant:

ant.project.properties['env.foo'] = 'bar' 

It is impossible to set environment variables from Gradle or JVM in general, but it is possible to trick Ant like this:

ant.project.properties['env.foo'] = 'bar' 
长安忆 2025-01-01 14:10:00

接受@Sergey 的解决方案:

ant.project.properties['env.foo'] = 'bar'

gradle 2.9 和 ant 1.9.7 上对我来说不起作用
这没有引发任何错误,但什么也不做。事实上,如果您查看代码实现为

public Hashtable<String, Object> getProperties() {
    return PropertyHelper.getPropertyHelper(this).getProperties();
}

其中 org.apache.tools.ant.PropertyHelper#getProperties 是

public Hashtable<String, Object> getProperties() {
    //avoid concurrent modification:
    synchronized (properties) {
        return new Hashtable<String, Object>(properties);
    }
}

所以它会进行显式复制,但不能 工作。

正确的做法gradle 文件中:

ant.project.setProperty('env.foo', 'bar')

文档提到了一些其他方式(注意,没有项目):

ant.buildDir = buildDir
ant.properties.buildDir = buildDir
ant.properties['buildDir'] = buildDir
ant.property(name: 'buildDir', location: buildDir)

Accepted solution from @Sergey:

ant.project.properties['env.foo'] = 'bar'

Does not work for me on gradle 2.9 and ant 1.9.7.
That did not thrown any error, but do nothing. Indeed if you are look at code it implemented as:

public Hashtable<String, Object> getProperties() {
    return PropertyHelper.getPropertyHelper(this).getProperties();
}

where org.apache.tools.ant.PropertyHelper#getProperties is:

public Hashtable<String, Object> getProperties() {
    //avoid concurrent modification:
    synchronized (properties) {
        return new Hashtable<String, Object>(properties);
    }
}

So it make explicit copy and it can't work.

The way do it correctly in gradle file:

ant.project.setProperty('env.foo', 'bar')

Documentation mention few other ways (note, without project):

ant.buildDir = buildDir
ant.properties.buildDir = buildDir
ant.properties['buildDir'] = buildDir
ant.property(name: 'buildDir', location: buildDir)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文