[已解决]Java编译报错?

# tree ./
./
└── src
    └── com
        └── neo
            └── code
                └── test
                    ├── test
                    │   └── Test.java
                    └── user
                        └── User.java

# cat src/com/neo/code/test/user/User.java
package com.neo.code.test.user;

public class User {
   private String name;
   private int age;
   private String address;
}% 

# cat src/com/neo/code/test/test/Test.java
package com.neo.code.test.test;

import com.neo.code.test.user.User;

public class Test {
   public static void main(String[] args) {
         User user = new User();
      System.out.println("hello world");
   }
}% 

# javac -version
javac 1.8.0_241

# javac -sourcepath src -classpath src com/neo/code/test/test/Test.java
javac: 找不到文件: com/neo/code/test/test/Test.java
用法: javac <options> <source files>
-help 用于列出可能的选项

-sourcepath选项使用错了吗?我看帮助文档还有-s选项,试了一下都不行,这是为啥?

↑原问题

# javac -sourcepath src -classpath src src/com/neo/code/test/test/Test.java
// 或者
# javac -s src -cp src src/com/neo/code/test/test/Test.java

编译器的执行可以不依赖package描述符,只要源文件不引入其它应用类或者被其它应用类引入,这时只要能准确定位到源文件即可;否则就要在源文件根目录执行编译或者用-sourcepath指定源文件根目录,这时需要再把-sourcepath目录做为前缀补充到源文件路径中去。

编译器的执行比JVM类加载多一步,从源文件import描述符中拼装完整类限定名并到类路径(-calsspath)中查询。如果找到多个目标类则编译第一个(如果未编译的话),如果找不到目标类则提示编译报错。

以上仅针对JDK8

阅读 1.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题