在 Eclipse 中运行 Java 应用程序时如何避免全局扩展

Posted

技术标签:

【中文标题】在 Eclipse 中运行 Java 应用程序时如何避免全局扩展【英文标题】:How to avoid glob expansion when running a Java app in Eclipse 【发布时间】:2011-04-21 03:19:06 【问题描述】:

我遇到了 Eclipse 运行配置的特殊行为,这似乎是一个仅限 Windows 的问题。假设我有一个 Java 应用程序可以打印出命令行参数,如下所示:

public class WildCard 
    public static void main(String[] args) 
        for (String arg: args) 
            System.out.println(arg);
        
    

如果我为参数提供了一个可以由 shell 扩展的通配符,shell 将扩展它并将其提供给 Java 程序。这并不奇怪。所以,如果我在命令提示符下这样做

java WildCard test/*

程序将打印

test/foo.txt
test/bar.txt

其中 foo.txt 和 bar.txt 是目录“test”中的文件。

如果我将通配符参数括在引号中,则可以防止外壳扩展; *nix 上的单引号和 Windows 上的双引号。所以对于 Windows,如果我在命令提示符下执行以下操作:

java WildCard "test/*"

程序现在将打印

test/*

(无扩展)。

但是,我发现Eclipse运行启动器中的引用似乎没有任何效果,并且参数仍然被扩展。如果我把

"test/*"

在Eclipse运行启动器的程序参数部分,运行上面的类,我还是得到

test/foo.txt
test/bar.txt

换句话说,当程序实际运行时,双引号似乎丢失了。这似乎只发生在 Windows 上。

有没有办法防止在 Windows 上使用 Eclipse 运行启动器进行 glob 扩展?

【问题讨论】:

我倾向于认为这是 eclipse 的一个错误,但想看看是否有可行的解决方法。 我建议用反斜杠转义通配符并没有真正奏效。它确实在我使用的测试用例中起作用(我仍然不知道为什么),但在其他情况下不起作用。我正在删除我的答案,因为它实际上并没有解决问题。 我在这个问题上发现了一个现有的 eclipse 错误...goo.gl/eM6e 我想知道启动器“java”在哪里处理通配符扩展。在jdk的源码中找不到。 我正在使用 IntelliJ IDEA,但我发现这篇文章很有帮助,mindprod.com/jgloss/wildcard.html 【参考方案1】:

这个问题看起来很连贯:

*.txt
foo.*

不会被扩展,但是

*
*.*
"*"
"*.*"
\"*\"
\"*.*\"

将被扩展。

看起来只有“所有文件”被扩展,但所有其他字符串(包括 *)都将保持不变。

我遇到了同样的问题,我使用的是 XP 和 eclipse 3.5.2

【讨论】:

【参考方案2】:

(.*) 模式不会被 eclipse 扩展,仍然可以作为一个正则表达式。

【讨论】:

以上是关于在 Eclipse 中运行 Java 应用程序时如何避免全局扩展的主要内容,如果未能解决你的问题,请参考以下文章

UILocalNotification - 应用程序未运行时如何处理?

当应用程序不在后台运行时如何处理推送通知

从最近清除应用程序时如何处理作为前台运行的服务?

连接多个设备时如何为特定设备运行 vts

IOS,应用启动时如何处理多个本地通知?

使用 JDBC 时如何为 SQL 语句启用日志记录