我把它放在一个包中后就不会编译Java源代码?

时间:2014-01-31 20:33:09

标签: java maven package

我在我的archlinux桌面上安装了Maven。 我有一个令人困惑的问题。

在入门指南和安装Maven之后,最后一切 我将默认公司设置为zerovector(而不是my-company。) 所以目录结构(和包)看起来像这样: src/com/zerovector/app (or com.zerovector.app)

应用只是说"Hello World" mvn编译失败。 mvn构建失败。我尝试运行时出现NoClassDefFound错误 Maven流程的产物。 尝试手动编译(javac App.java)会导致NoClassDefFound失败。 一旦我删除package com.zerovector.app;行突然它编译并工作。 我可以去javac App.java并且它可以很好地编译成App.class(简单的Hello World prog。) 这个App.class确实很小"Hello World"并退出正常。

为什么包行为了一堆无意义而抛出java?我可以解决这个问题吗? 我将不得不手动编码/组织并忘记Maven和包?

1 个答案:

答案 0 :(得分:0)

使用Maven,Java类代码应位于src/main/java/com/zerovector/app目录中,而不应位于src/com/zerovector/app中。如果您不想使用默认源目录,则必须更改配置。

如果您使用javac,请不要将当前目录更改为src/main/java/com/zerovector/app,而是保留在源根目录中:

 cd src/main/java
 javac com/zerovector/app/App.java

如果遵循此规则,包声明和Java源文件的相对路径匹配,一切正常。如果将当前目录更改为Java源文件所在的位置,则编译器不需要包(= default package):

cd src/main/java/com/zerovector/app/
javac App.java