屏蔽 Windows 命令行中的保留字

屏蔽 Windows 命令行中的保留字

我有一个 Java 程序,需要使用如下命令启动:

java -cp "some.jar;some2.jar" -Dsome.prop.dir=C:\somedir com.software.MainClass

现在这里的问题是-Dsome.prop.dir=C:\somedir参数 - 由于某种原因,它导致 Java 失败Could not find or load main class com.software.MainClass。如果我省略该参数,程序可以正常启动,但显然,属性未设置。

我猜可能是因为dirWindows 中是保留字。除了更改 Java 应用程序或在 Windows 中为 Java 应用程序制作一些特殊的二进制/PE 启动器之外,还有其他方法可以掩盖它或解决这个问题吗?

答案1

我没有解决方案,但是有一些测试和建议来调查您的问题。

我尝试重现您描述的问题。我甚至创建了虚假名称(目录 somedir、类 Mainclass)。

这是我的 Mainclass 版本。本质上,它获取系统属性,并使用它来生成一些简单的诊断输出。

package com.software;

import java.io.File;

public class Mainclass {

    public static void main(String[] args) {
        String someDir = System.getProperty("some.prop.dir");
        if (someDir == null || someDir.isEmpty()) {
            System.out.println("No directory parameter specified");            
        } else {
            File dir = new File(someDir);
            System.out.println(String.format("Directory stats: %s, %s, %s", someDir, dir.getAbsolutePath(), dir.isDirectory() ? "directory" : "file"));
        }
        System.out.println("Main running okay.");
    }      
}

接下来,我创建了一个包含Mainclass的jar文件,并将其命名为some.jar。

我运行了如下命令行:

java -cp "some.jar" -Dsome.prop.dir=C:\somedir com.software.Mainclass

结果:
目录统计:C:\somedir,C:\somedir,目录
主运行正常。

我也运行了没有-D参数:

java -cp "some.jar" com.software.Mainclass

结果:没有指定目录参数
主运行正常。

尽管我能够毫无问题地运行该问题,但我发现几个可能存在问题的地方:

  1. jar 文件。您指定的类路径是前两个文件名。Mainclass 必须位于其中一个文件名中,否则将无法找到。我怀疑这不是问题,因为它在没有 -D 参数的情况下也能正确运行。
  2. -D 参数在内部用于定位类。在上面的示例代码中,我只是报告了目录。也许您正在以某种方式使用它来定位类文件,但找不到它?也许程序使用目录来查找类,但是当您省略目录时,它会默认使用 jar 文件中指定的目录?

如果我在 bin 目录(生成类的地方)中运行,我就可以省略 -cp 命令并且它可以正确运行。

如果我在没有 Mainclass 的 jar 中使用 -cp,就会出现错误,但无论是否指定了 -D,我都会出现错误。

相关内容