【问题标题】:Fiddly thing to do with \bin directory in Eclipse与 Eclipse 中的 \bin 目录有关的繁琐事情
【发布时间】:2016-04-16 19:28:04
【问题描述】:

这真的让我很困惑。

在我的 Eclipse 工作区中,我有一个名为“Java 暂存器”的项目。在“包资源管理器”中,您会看到“src”(源文件夹),然后是“根”(包)。在“root”下是一个名为“LoggingTest.java”的.java 文件。

所以这个java文件的路径是“G:\My Documents\software projects\workspace\Java scratchpad\src\root\LoggingTest.java”。

当我在 Eclipse 中运行以下代码时:

        Path currentRelativePath = Paths.get("");
        String s_currRelPath = currentRelativePath.toAbsolutePath().toString();
        String pathWithForwardSlashes = s_currRelPath.replace( "\\", "/" );
        System.out.println( "path " + pathWithForwardSlashes );

结果是

路径 G:/我的文档/软件项目/工作区/Java 暂存器

但是...当我在命令提示符处运行同一段代码时,我必须从以下目录开始:

G:\My Documents\software projects\workspace\Java Scratchpad\bin

...然后在提示符处转到 > java root.LoggingTest

上述代码的输出是:

路径 G:/我的文档/软件项目/工作区/Java 暂存器/bin

换句话说,当您在命令提示符处运行该东西时,您正在运行 \bin 目录下的 .class 文件,但是当您在 Eclipse 中运行时,Eclipse 框架“假装”该 bin 目录不存在.

结果是“当前相对路径”(CWD) 的值不同,具体取决于我是在 Eclipse 中运行还是在命令提示符下运行。如果我想创建或使用相对于 CWD 的目录,我将获得不同的值,具体取决于我是在 Eclipse 中运行还是在命令提示符下运行。

今晚我感觉很慢。我该怎么办?有没有办法检测项目是在 Eclipse 中运行还是在命令提示符下运行?还是我应该简单地尝试检测路径是否以“\bin”结尾并删除这四个字符以使路径等效?

稍后

只是添加一个注释来回复 E-Riz 的评论:

这是一件简单的事情:我想创建日志,我想创建 Lucene 索引......并将东西保存在一个位置(无论如何在这个阶段)我只是想把这个输出放在一个位置,比如 @987654323 @ 或 ...\Java scratchpad\output\logging\[name of log]

而且,是的,当然,目前我确实知道这里涉及的绝对路径......但是,顾名思义,这是一个“便签本”或测试区域......所以这段代码使用 CWD 来确定在哪里放置或查找日志或索引可以更通用地使用,而无需知道所涉及的绝对路径。

但它必须在 Eclipse 或命令提示符下工作......!

注意,我目前的解决方法确实是检查pathWithForwardSlashes 是否以“\bin”结尾,如果是,则删除最后 4 个字符。我不可能是唯一遇到这种怪事的人。相信会有更聪明的解决方案!

【问题讨论】:

  • 这是可以解释的,但首先你为什么不解释你的最终目标是什么。换句话说,相对于当前工作目录,您要实现什么?我很确定最好的答案将取决于了解“当前工作目录是什么?”之外的真正目标。

标签: java eclipse command-prompt cwd


【解决方案1】:

您应该知道或牢记一些事实:

  • 在运行时,可以(应该)为 Java 提供一个可使用的类路径;默认的应用程序类路径只是.(调用java 的当前目录)。这就是为什么在您看来必须从项目的\bin 目录运行程序的原因;因为您没有告诉 JVM 在其他任何地方寻找类。运行应用程序时您应该是setting the runtime classpath,这可以通过多种方式完成,但对于简单的程序,通常通过批处理文件或 shell 脚本完成。请注意,当您依赖任何 JAR 时,使用 -cp 指定类路径至关重要。
  • 在 Eclipse 中,由于应用程序不是通过命令行运行的,因此 Eclipse 具有启动配置,它封装了启动程序(在“运行”或“调试”模式下)所需的所有细节。 Here's a decent tutorial(虽然有点过时了;您可以在 Internet 上找到有关启动配置的更多信息。您正在寻找的关键配置位于 Arguments 选项卡上,您可以在其中指定程序启动配置的工作目录。默认是项目的根目录。看看这与您在命令行上运行时有何不同?这解释了您在输出中看到的差异。您可以更改工作Eclipse 启动配置中的目录,但我倾向于将其保留为项目根目录。

因此,您有几个选项可以使事情保持一致:使用脚本/批处理在命令行上运行您的应用程序,指定 -cp 以便 JVM 知道您的类文件在哪里(以及它的任何其他 JAR可能也需要在路上);或者,重新配置您的 Eclipse 启动以匹配您在命令行上运行的位置。我认为(到目前为止)更可取的选择是第一个。

话虽如此,当涉及到 Java 中的文件/资源​​时,您通常根本不需要进行任何路径操作。一切都与运行 Java 的当前工作目录或类路径相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多