问题描述
我试图更好地理解java
和javac
的用法,以便从命令行编译和运行应用程序。
我的项目结构如下:
+ lib
- mylibrary.jar
+ out
+ at
+ mypackage
- Main.class
+ src
+ at
+ mypackage
- Main.java
.jar
文件仅包含类at/mylibrary/Test.class
。
从src
目录运行:
javac -cp "../lib/*" -d "../out" at/mypackage/Main.java
这似乎有效。 out
目录及其所有内容已创建。现在,我进入out
目录并尝试运行它:
java -cp "../lib/*" at.mypackage.Main
那是我得到java.lang.classNotFoundException
的地方。找不到主类at.mypackage.Main
。
这些是Main.java
的内容:
package at.mypackage;
import at.mylibrary.Test;
public class Main {
public static void main(String[] args) {
System.out.println(Test.hello());
}
}
package at.mylibrary;
public class Test {
public static String hello() {
return "Hello!";
}
}
我哪里出错了?如何在命令行中使用javac
和java
编译和运行该项目?
PS:我知道使用Maven之类的内置管理工具来进行此操作比较容易,尤其是对于较大的项目,但是我真的想进一步了解它的总体工作原理。我在StackOverflow上搜索了建议,但无法正常工作。
编辑:我明白了。我导航到out
目录,并使用以下命令运行Main
:
java -cp ".:../lib/*" at.mypackage.Main
我不知道我第一次出错是什么,但是现在可以了。就像注释中建议的那样,您必须在类路径中包括当前目录.
,因为当您通过-cp
提供类路径时,默认类路径(包括当前目录)将被覆盖。至少我是这样理解的。 :
将目录彼此分开。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)