javac*.java Windows命令行错误:*作为非法字符

javac*.java Windows命令行错误:*作为非法字符,java,javac,Java,Javac,所以我试着编译我的java项目(9个类3个文件),感觉不需要复杂的工作,我试着从项目根目录上方的文件夹中使用标准的“javac*.java”。(并从根本身改变)。Javac在命令行上抛出并解析错误,声称索引0:*.java处存在非法字符。选择的选项似乎并不重要,因为1)我尝试了一些,2)它在文件的解析行崩溃 虽然我只知道写下所有.java文件的所有文件路径就可以解决问题,但我发现这很烦人,将来可能会有问题。而且我在这个问题上什么也没发现,所以我这边可能有一些非常奇怪或非常愚蠢的事情 C:\Use

所以我试着编译我的java项目(9个类3个文件),感觉不需要复杂的工作,我试着从项目根目录上方的文件夹中使用标准的“javac*.java”。(并从根本身改变)。Javac在命令行上抛出并解析错误,声称索引0:*.java处存在非法字符<*>。选择的选项似乎并不重要,因为1)我尝试了一些,2)它在文件的解析行崩溃

虽然我只知道写下所有.java文件的所有文件路径就可以解决问题,但我发现这很烦人,将来可能会有问题。而且我在这个问题上什么也没发现,所以我这边可能有一些非常奇怪或非常愚蠢的事情

C:\Users\MarcinS\IdeaProjects\Beta2\WynikiZawodow\src\com>javac *.java
Exception in thread "main" java.nio.file.InvalidPathException: Illegal char < * > at index 0: *.java
        at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
        at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
        at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
        at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
        at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
        at java.base/java.nio.file.Paths.get(Paths.java:84)
        at jdk.compiler/com.sun.tools.javac.main.Option$37.process(Option.java:700)
        at jdk.compiler/com.sun.tools.javac.main.Option.handleOption(Option.java:1098)
        at jdk.compiler/com.sun.tools.javac.main.Arguments.doProcessArgs(Arguments.java:401)
        at jdk.compiler/com.sun.tools.javac.main.Arguments.processArgs(Arguments.java:367)
        at jdk.compiler/com.sun.tools.javac.main.Arguments.init(Arguments.java:193)
        at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:222)
        at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:162)
        at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)
        at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43)
C:\Users\MarcinS\IdeaProjects\Beta2\WynikiZawodow\src\com>javac*.java
线程“main”java.nio.file.InvalidPathException中出现异常:索引0:*.java处的非法字符<*>
位于java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
位于java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
位于java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
位于java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
位于java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
位于java.base/java.nio.file.Paths.get(path.java:84)
位于jdk.compiler/com.sun.tools.javac.main.Option$37.process(Option.java:700)
位于jdk.compiler/com.sun.tools.javac.main.Option.handleOption(Option.java:1098)
位于jdk.compiler/com.sun.tools.javac.main.Arguments.doProcessArgs(Arguments.java:401)
位于jdk.compiler/com.sun.tools.javac.main.Arguments.processArgs(Arguments.java:367)
位于jdk.compiler/com.sun.tools.javac.main.Arguments.init(Arguments.java:193)
位于jdk.compiler/com.sun.tools.javac.main.main.compile(main.java:222)
位于jdk.compiler/com.sun.tools.javac.main.main.compile(main.java:162)
位于jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)
位于jdk.compiler/com.sun.tools.javac.Main.Main(Main.java:43)

正如您在评论中回答我的问题时所说,您的类在自己的包中。为了编译它,shell的当前目录必须是包(即子目录)的起始目录。这会导致您在启动编译器时没有java文件,因此shell无法将*.java解析到该目录中的java文件列表中,
*.java
将被传递到java编译器,而java编译器将尝试利用该文件名


这不是javac的错,因为文件名解析是shell的工作。既然您已经有了一个解决方案,您可以继续使用它,或者切换到一个IDE,该IDE附带了一些使您的生活更轻松的功能(至少在Java编程术语中;-)

您的类是否在默认包中?当您的项目不断增长时,您不认为迁移到IDE和/或Ant之类的构建工具,Maven还是Gradle?它们在3个不同的包中。我使用InteliJ。但后来我又发现了一个关于“如何将你正在工作的***项目编译成.jar”的12屏教程。它的复杂性让我非常恼火,以至于我选择了javac*.java的“更简单”的方式,这应该是可行的。如前所述,我知道一种变通方法,但我认为这至少是一个需要解决的有趣问题(而且可能会咬到我,或者将来会咬到其他人)。很有趣的是,由于InteliJ默认的创建包的方式,如果我达到至少有一个.java的级别,我的包根级别以下(com/comapny/main,所以如果我去公司,那里还有其他软件包,但是import station不起作用,因为没有com.company,因为com文件夹更高)。此外,如果java曾经做过任何事情,那也从来没有比任何事情都简单。