如何使用javac编译java包结构
我正在尝试编译(从命令行)一个java包,该包导入我自己的另一个包。我遵循了一个错误,但是当我试图编译最终的java文件(CallPackage.java)时,似乎遇到了一个错误 以下是文件结构:如何使用javac编译java包结构,java,command-line,compilation,package,javac,Java,Command Line,Compilation,Package,Javac,我正在尝试编译(从命令行)一个java包,该包导入我自己的另一个包。我遵循了一个错误,但是当我试图编译最终的java文件(CallPackage.java)时,似乎遇到了一个错误 以下是文件结构: + test_directory (contains CallPackage.java) -> importpackage -> subpackage (contains HelloWorld.java) 下面是CallPackage.java: /// CallPa
+ test_directory (contains CallPackage.java)
-> importpackage
-> subpackage (contains HelloWorld.java)
下面是CallPackage.java:
/// CallPackage.java
import importpackage.subpackage.*;
class CallPackage{
public static void main(String[] args){
HelloWorld h2=new HelloWorld();
h2.show();
}
}
下面是HelloWorld.java:
///HelloWorld.java
package importpackage.subpackage;
public class HelloWorld {
public void show(){
System.out.println("This is the function of the class HelloWorld!!");
}
}
尝试的步骤
$javac HelloWorld.java
编译HelloWorld.java$javac CallPackage.java
编译CallPackage.javaCallPackage.java:1: package importpackage.subpackage does not exist
import importpackage.subpackage.*;
^
CallPackage.java:4: cannot find symbol
symbol : class HelloWorld
location: class CallPackage
HelloWorld h2=new HelloWorld();
^
CallPackage.java:4: cannot find symbol
symbol : class HelloWorld
location: class CallPackage
HelloWorld h2=new HelloWorld();
^
3 errors
如何编译这两个包?非常感谢你的帮助 您确定导入包/子包在您的类路径中吗 -cp路径或类路径 指定在何处查找用户类文件,以及(可选)注释处理器和源文件。此类路径覆盖CLASSPATH环境变量中的用户类路径。如果未指定CLASSPATH,-cp或-CLASSPATH,则用户类路径由当前目录组成。有关详细信息,请参见设置类路径 如果未指定-sourcepath选项,则还将在用户类路径中搜索源文件 如果未指定-processorpath选项,则还将在类路径中搜索注释处理器 (1)首先编译代码 javac-d importpackage.subpackage.HelloWorld (2) 然后编译CallPackage.java
javac CallPackage.java问题是需要为每个命令(javac和java)设置类路径: 尝试的步骤
$javac-cp。importpackage/subpackage/HelloWorld.java
$javac-cp。CallPackage.java
$java-cp。呼叫包
总之,在每个步骤中,必须指定类路径。这样运行之后,它就工作了。对我来说,情况也一样。我通过同时编译类来接管它。
例如,以下是我的项目:
+ beerV1
-> classes
-> src
-> com
-> example
-> model
-> BeerExpert.java
-> web
-> BeerSelect.java
BeerExpert.java:
package com.example.model;
import ...
public class BeerExpert{
...
}
BeerSelect.java:
package com.example.web;
import com.example.model.*;
import ...
public class BeerSelect {
...
}
如您所见:BeerSelect.java正在尝试导入com.example.model包中的类。
第一次,我首先通过命令编译了BeerExert.java:
-->javac-d类src/com/example/model/BeerExpert.java
然后:
-->javac-d类src/com/example/web/BeerSelect.java
结果是:
-->。。。错误:包com.example.model不存在
因此,我知道单独编译多个类在这种情况下不起作用
在谷歌受苦之后,我找到了一个非常简单的方法来解决这个问题:
只需一次性编译:
--> javac -d classes src/com/example/model/BeerExpert.java src/com/example/web/BeerSelect.java
最后,我得到的是:
+ beerV1
-> classes
-> com
-> example
-> model
-> BeerExpert.class
-> web
-> BeerSelect.class
-> src
-> com
-> example
-> model
-> BeerExpert.java
-> web
-> BeerSelect.java
希望对您有所帮助。删除您的软件包文件夹(将代码粘贴到其他文件夹后),然后在cmd中找到当前代码所在的文件夹,然后尝试javac-d。Helloworld.java(这也将创建Helloworld类和子包),并在编译运行代码后为您的主功能代码ie Callpackage.java尝试相同的方法尝试java Callpackage这是一个古老的主题,但Google已经将我带到了这个站点。为了完整性,我想在@Vĩnh Th中添加一点ụy Trần关于如何在编译到自定义文件夹后运行主类的回答。虽然现在看起来很琐碎,但我花了一些时间才把它做好 为了运行项目,还需要指定类的路径:
java -classpath <directory> your.package.name.classname
我希望它能帮助一些人,因为我花了一些时间来解决它。这将帮助你。最好使用像Eclipse这样的IDE来执行java程序,因为它可以自动创建包?当我在test_目录和subpackage目录中尝试此操作时,我得到一个错误,它无法找到此目录。因为您在子包中编译HelloWorld。我猜@Jazzy Josh您是说当我执行步骤2时,我需要使我的类路径指向步骤1中的.class文件所在的目录。当我这样做的时候,我运行了:$javac-cp importpackage/subpackage/CallPackage.java,但是我得到了这个错误:请删除或者确保它出现在类路径的正确子目录中。HelloWorld h2=新HelloWorld();^2个错误问题最终是类路径。我需要用“-cp”运行所有java和javac命令。例如:$javac-cp。java和$java-cp。CallPackage@JazzyJosh请看一下,我想我用了一种错误的方式使用了
-cp
,我不知道如何纠正我的错误。谢谢。这绝对是最好的答案!其他答案显然会导致预期的问题,因为我无法在没有其他答案的情况下编译一个答案!他也有类似的问题。Vĩnh Thụy Trần的解决方案工作得很好:在项目的顶层使用命令提示符,包括所有在同一javac行上具有路径的类,谁会想到这么简单!如果您的类彼此引用,那么这在Windows上不起作用。。。
java -cp <directory> your.package.name.classname
java -cp classes com.example.web.BeerSelect