javac -sourcepath选项无法生效,编译指定Java文件遇阻求助
我来帮你搞定这个编译问题!你当前在C:\根目录下,要编译的Bingo.java属于bingo包,源文件路径是C:\Users\Devashish\Documents\NetBeansProjects\Bingo\src\bingo\Bingo.java。你用-sourcepath的思路是对的,但之前的命令在路径搭配上出了问题,下面给你几个可行的解决方案:
方案1:使用绝对路径直接编译
在C:\目录下执行这个命令,明确指定sourcepath和源文件的绝对路径:
C:\>javac -sourcepath C:\Users\Devashish\Documents\NetBeansProjects\Bingo\src C:\Users\Devashish\Documents\NetBeansProjects\Bingo\src\bingo\Bingo.java
这里-sourcepath指向的是包结构的根目录(也就是src),编译器会从这里开始查找对应包下的源文件;后面的绝对路径确保编译器能准确找到要编译的Bingo.java。
方案2:切换到src目录后编译
先切换到源文件所在的根目录(src),再用相对路径编译,这样甚至可以省略-sourcepath选项:
C:\>cd C:\Users\Devashish\Documents\NetBeansProjects\Bingo\src C:\Users\Devashish\Documents\NetBeansProjects\Bingo\src>javac bingo\Bingo.java
因为当你在src目录下时,编译器默认会把当前目录作为sourcepath,直接编译bingo\Bingo.java就能正确识别包结构。
方案3:指定编译输出目录(更贴合NetBeans结构)
如果想把编译后的.class文件放到NetBeans常用的bin目录,可以加上-d选项指定输出路径:
C:\>javac -sourcepath C:\Users\Devashish\Documents\NetBeansProjects\Bingo\src -d C:\Users\Devashish\Documents\NetBeansProjects\Bingo\bin C:\Users\Devashish\Documents\NetBeansProjects\Bingo\src\bingo\Bingo.java
执行后,Bingo.class会生成在C:\Users\Devashish\Documents\NetBeansProjects\Bingo\bin\bingo目录下,和NetBeans的默认编译结构一致。
问题根源
你之前的命令中,-sourcepath指向了src目录,但后面的源文件用了相对路径bingo\Bingo.java——而你当前在C:\根目录,这个相对路径是不存在的,所以编译器找不到文件。要么给源文件用绝对路径,要么切换到正确的目录用相对路径,就能解决问题啦!
内容的提问来源于stack exchange,提问作者user5818995

