如何使用javac编译Netbeans项目
我正在NetBeans中编写一个项目,但我需要使用javac编译它,因为它需要通过CLI构建和执行。我怎样才能做到这一点?我已经看到很多项目特定的答案,但没有一个适合我的问题。我读过的javac的人,并适当设置好的类路径:javac -cp .. MyMain.java
,conssidering我的项目具有以下结构:如何使用javac编译Netbeans项目
src
|_mainPackage
|_package2
|_package3
|_MyMain.java
和我使用的是点格式在我的进口是这样的:
import package1.class1
import package2.class2
public class MyMain {
public static void main(String[] args) {
//Stuff with classes in package1
.
.
.
//Stuff with classes in package2
.
.
.
}
}
我不能使用ant,因为它是用CLI中的javac编译的,因为它是一个大学项目,并且受到教授的限制。
编辑: 事实上,我编译使用javac用命令[email protected]: mainPackage $ javac -cp .. MyMain.java
我的消息来源,因为我进口使用点分格式,而“根包”位于“mainPackage”文件夹;但是,当我要去跑项目,我有这样的输出:
[email protected]: mainPackage $ java VideoRent
Exception in thread "main" java.lang.NoClassDefFoundError: MyMain (wrong name: mymain/MyMain)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: MyMain. Program will exit.
在一个干净的临时目录,请尝试这一系列命令。然后检查和了解的目录布局,包声明和各种路径设置,如-d bin
,-s src
和-cp bin
:
mkdir -p src/mainPackage
echo "package mainPackage; public class MyMain { public static void main(String[] args) { System.out.println(\"Hello world\"); }}" > src/mainPackage/MyMain.java
mkdir bin
javac -d bin -s src src/mainPackage/MyMain.java
java -cp bin mainPackage.MyMain
的文件夹中https://github.com/SpotterRF/json-examples/tree/master/java/jackson在Makefile中有一个很好的示例 – CoolAJ86
试试这个:
javac.exe -d class -s src src/myproject/mainpackage/*.java
src/myproject/mainpackage/package2/*.java
src/myproject/mainpackage/package3/*.java
可以试试这也(Windows)中
for /r %%a in (*.java) do (javac "%%a")
正如你编译多个类相同的方式。你遇到的问题究竟是什么?你不知道如何“cd”到代表软件包根目录的文件夹?或者你不知道如何完全编译多个类?你能编译一个类吗? – BalusC
它看起来像你正在设置你的CLASSPATH到你的当前目录“javac -cp.MyMain.java”之上的一个目录,这可能会导致你的问题。 – roartechs
@BalusC:好吧,自从我上次用java编程以来,我有很长的一段时间,但是我记得我根本没有使用过软件包。我把我所有的类放在同一个文件夹下,然后执行'javac MainClas.java'进行编译,然后'java MainClass'运行;它处理我需要的每个依赖项。其实,使用上面的命令,我让它编译我的类,但后来我得到一个奇怪的错误。检查我的编辑。 – Throoze