[英]how to compile and run ExampleCallIn for asterisk-java using javac and java
[英]How to compile java package structures using javac
我正在尝试编译(从命令行)一个导入我自己的另一个包的 java 包。 我正在在线学习教程,但是当我尝试编译最终的 java 文件 (CallPackage.java) 时,似乎出现错误。
这是文件结构:
+ 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
。$javac CallPackage.java
。这给了我最后一个命令的错误:
CallPackage.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
如何编译这两个包? 非常感谢您的帮助!
问题是需要为每个命令(javac 和 java)设置类路径:
尝试的步骤
从 top_level 编译 HelloWorld.java,而不是去分包:
$javac -cp . importpackage/subpackage/HelloWorld.java
以同样的方式编译 CallPackage.java:
$javac -cp . CallPackage.java
还使用类路径运行文件:
$java -cp . CallPackage
注意:运行“$java CallPackage”将给出错误“错误:无法找到或加载主类 CallPackage”
总之,在每个步骤中,必须指定类路径。 它在这样运行后工作。
和我一样的情况。 我通过同时编译类来接管它。
例如,这是我的项目:
+ beerV1
-> classes
-> src
-> com
-> example
-> model
-> BeerExpert.java
-> web
-> BeerSelect.java
啤酒专家.java:
package com.example.model;
import ...
public class BeerExpert{
...
}
啤酒选择.java:
package com.example.web;
import com.example.model.*;
import ...
public class BeerSelect {
...
}
如您所见: BeerSelect.java正在尝试导入com.example.model包中的类。
第一次,我先通过命令编译BeerExert.java :
--> javac -d classes src/com/example/model/BeerExpert.java
然后:
--> javac -d classes src/com/example/web/BeerSelect.java
结果是:
-->... error: package com.example.model does not exist
所以,我知道在这种情况下单独编译多个类是行不通的。
在谷歌上苦苦挣扎后,我发现了一个非常简单的方法来解决这个问题:
只需一次编译:
--> 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
希望有帮助。
你确定 importpackage/subpackage 在你的类路径中吗?
-cp 路径或 -classpath 路径
指定在哪里可以找到用户类文件,以及(可选)注释处理器和源文件。 该类路径覆盖 CLASSPATH 环境变量中的用户类路径。 如果 CLASSPATH、-cp 和 -classpath 均未指定,则用户类路径由当前目录组成。 有关更多详细信息,请参阅设置类路径。
如果未指定 -sourcepath 选项,还会在用户类路径中搜索源文件。
如果未指定 -processorpath 选项,则还会在类路径中搜索注释处理器。
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
这是一个古老的话题,但谷歌把我带到了这个网站。 为了完整起见,我想在@Vĩnh Thụy Trần 关于如何在将主类编译到自定义文件夹后运行它的答案中添加一点。 虽然现在看起来微不足道,但我花了一些时间才把它做好。
为了运行您的项目,您还需要指定类的路径:
java -classpath <directory> your.package.name.classname
或者
java -cp <directory> your.package.name.classname
再次以 Vĩnh Thụy Trần 的示例为例,该命令将如下所示:
java -cp classes com.example.web.BeerSelect
我希望它会帮助某人,因为我花了一些时间来弄清楚。
(1)首先编译代码
javac -d importpackage.subpackage.HelloWorld
(2)然后编译CallPackage.java
javac CallPackage.java
删除您的包文件夹(将您的代码粘贴到其他文件夹后),然后在 cmd 中找到您当前代码所在的文件夹并尝试 javac -d 。 Helloworld.java(这也将创建Helloworldclass 和子包)并在编译运行代码后尝试为您的mainfunction 代码即Callpackage.java 尝试相同的代码try java Callpackage
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.