在tomcat JSP应用程序中,我有这个目录布局:
webapps/
myProjectName/
index.jsp
WEB-INF/
classes/
mypackage/
class1.java
class2.java
我正在尝试编译引用class2.java的class1.java。它的编码形式如下:
package mypackage;
public class class1 extends class2 {}
和class2看起来像这样:
package mypackage;
public class class2 {}
然而,我在class1上收到错误,说无法找到class2。首先我编译了class2,编译得很好,但是当我尝试编译class1时失败了,说找不到class2。我尝试将目录添加到我的类路径(ubuntu)中,方法是将其添加到/ etc / enviornment:
/usr/local/tomcat/webapps/myProjectName/WEB-INF/classes
但它仍然无法编译。
知道什么是错的吗?
确切的错误输出是:
javac "Page.java" (in directory: /usr/local/tomcat/webapps/developers/WEB-INF/classes/library)
Page.java:20: cannot find symbol
symbol : class DynamicPage
location: class library.Page
DynamicPage dynamicClasses = {new registerPage()};
^
Page.java:20: illegal initializer for <none>
DynamicPage dynamicClasses = {new registerPage()};
^
Page.java:20: cannot find symbol
symbol : class registerPage
location: class library.Page
DynamicPage dynamicClasses = {new registerPage()};
^
Page.java:34: cannot find symbol
symbol : class DynamicPage
location: class library.Page
DynamicPage selected = null;
^
Page.java:35: cannot find symbol
symbol : class DynamicPage
location: class library.Page
for (DynamicPage dp: dynamicClasses) {
^
5 errors
Compilation failed.
答案 0 :(得分:1)
我不明白为什么有些人反对使用Eclipse或Netbeans(或任何IDE)。我意识到有些人更喜欢手动驾驶到自动驾驶,因为你倾向于感受到发动机的原始动力。我学会了使用自动驾驶,然后习惯了驾驶手册。我精通手动驾驶员现在通过自动学习驾驶。我现在甚至可以处理挖掘机,而且非常熟练(我为我正在建造的房子挖洞)。
与Java相同。您让Netbeans或Eclipse为您构建整个Web应用程序结构,然后检查结构。玩蚂蚁构建。通过思考来学习IDE。
我知道有些人认为如果没有IDE,你会让自己暴露在原始编译过程中,因此会对构建过程有一个“更深入”的理解。真?不要浪费你的时间。让IDE为您完成。如果您愿意检查IDE生成的文件和结构,您将更快地学习构建过程。
答案 1 :(得分:0)
在您的classes文件夹中运行:
javac -cp /usr/local/tomcat/webapps/myProjectName/WEB-INF/classes *.java
您需要在编译期间包含类路径。
答案 2 :(得分:0)
在WEB-INF下的任何地方都不应该有.java源文件。将编译和包装分开。
答案 3 :(得分:0)
除了不识别课程之外还有其他一些错误,但是当涉及到你的问题时:
最重要的是:不要认为这很难或需要复杂的设置。这真的很容易,一旦你开始学习Java就很重要。
当javac编译一个类并且它发现它使用了一些其他类时,它会在两个地方查找它,称为classpath(对于编译版本)和sourcepath(对于源代码)。默认情况下,它们都包含当前工作目录。请注意,它与包含.java文件的目录不同。
类路径中.java或.class文件的确切位置总是取决于包(但你已经知道了)。在你的情况下,如果你这样做:
cd WEB-INF/classes/mypackage
javac class1.java
你的sourcepath是WEB-INF / classes / mypackage,所需的类是mypackage.class2,因此,对于直觉,javac会查找文件WEB-INF / classes / mypackage / mypackage / class2.java。此类文件不存在,您收到错误。
另一方面,想象一下:
cd WEB-INF/classes
javac mypackage/class1.java
现在你的sourcepath是WEB-INF / classes,所需的类是mypackage.class2,javac将查找文件WEB-INF / classes / mypackage / class2.java - 它会毫无问题地找到它。
道德:编译时,总是在源代码的顶层目录中编写javac,在所有包之上。这样你的包就可以与目录一致,如javac所见,编译完美无缺。
在你设法完全理解发生的一切之后,一定要切换到Netbeans(并且,在并行线程中,学习ant,然后maven)。它安装了自己的tomcat 6副本,您可以使用它来开发您的应用程序; tomcat 7向下兼容,因此将应用程序安装到它只需将war文件(由netbeans构建)复制到tomcat 7 webapps。