【问题标题】:Javac splatting operator '@' cannot be used in Powershell and cmdJavac splatting operator '@' 不能在 Powershell 和 cmd 中使用
【发布时间】:2021-07-11 06:43:53
【问题描述】:

我尝试用多个目录中的多个 .java 文件编译一个 java 项目。我认为对我有帮助的唯一标志是@filename,其中 filename 代表具有所有 .java 路径的文件。

我运行的 PowerShell 命令是:

javac @sources.txt

这是错误:

喷溅运算符“@”不能用于引用 表达。 '@sources' 只能用作命令的参数。 要在表达式中引用变量,请使用“$sources”。

我提到我用cmd测试了这个命令,结果是一样的。

使用powershell而不是ant来编译java项目很重要。我也很满意一个解决方案,它可以在不使用 javac 的这个选项的情况下编译我的所有 .java 文件。

我想做的进一步是创建一个 jar 文件。为此,我必须编译 java 文件。

cd $basedir

cmd /r dir "*.java" /s /B  > sources.txt

javac "@sources.txt"

我就是这样做的,sources.txt 文件很好。

【问题讨论】:

  • 如果我执行cmd /r dir /s /B > sources.txt,那么sources.txt 将包含其自身的完整路径作为第一个参数。那将不是是正确的javac 论点。我建议您将列表限制为明确地仅*.java 文件:cmd /r dir "*.java" /s /B

标签: java powershell cmd javac


【解决方案1】:

该错误消息暗示 PowerShell 尝试解释您不想要的 @sources.txt。您想将该字符串逐字传递给javac。为此,您需要引用参数:

javac "@sources.txt"

【讨论】:

  • 我已经试过了,这是我以字符串形式运行后出现的错误:javac : javac: invalid flag: : At line:1 char:5 + javac "@sources.txt" + ~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (javac: invalid flag: ::String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError
  • 您使用的是什么 Java 版本? javac -version 的输出是什么?
  • javac : javac 1.8.0_73 At line:1 char:1 + javac -version + ~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (javac 1.8.0_73 :String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError
  • 它对我有用,但我对 PS 的了解还不够,无法理解它。请张贴您的 PS 脚本的minial, reproducible example 以证明错误。 @file 支持至少从 Java 6 开始就存在,所以这不应该是问题。
  • @learner123:不要将 cmets 用于此类信息,请将其编辑到您的问题中。
猜你喜欢
  • 2018-02-26
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多