在命令行中使用javac进行编译时出现“package javax.inject不存在”错误

时间:2012-09-06 23:55:17

标签: java java-ee glassfish javac

我迈出了学习JSF的第一步。我发现这本有趣的书名为“Core JavaServer Faces Third Edition”。

尝试编译第一个示例,您可以从http://horstmann.com/corejsf/下载源代码。当我在命令行上键入以下内容时

javac UserBean.java

我收到错误:

package javax.inject does not exist
package javax.enterprise.context doe not exist

我已经下载了Java EE,Ant和GlassFish。

以下是我的命令行:

C:\JSF-Tutorial\corejsf3-examples\javaee\ch01\login\src\java\com\corejsf>javac UserBean.java
UserBean.java:4: error: package javax.inject does not exist
import javax.inject.Named;
                   ^
UserBean.java:6: error: package javax.enterprise.context does not exist
import javax.enterprise.context.SessionScoped;
                               ^
UserBean.java:9: error: cannot find symbol
@Named("user") // or @ManagedBean(name="user")
 ^
  symbol: class Named
UserBean.java:10: error: cannot find symbol
@SessionScoped
 ^
  symbol: class SessionScoped
4 errors

C:\JSF-Tutorial\corejsf3-examples\javaee\ch01\login\src\java\com\corejsf>

上传谷歌搜索如何编译Java EE应用程序但没有任何用处。

请有人帮我解决这个问题,我需要解决这个问题,以便我可以继续学习JSF。

S.P: 在学习使用NetBeans编译Java EE项目之前,我想学习简单地编译Java EE应用程序。 我更喜欢先学习使用GlassFish,然后再考虑后者,我会考虑使用Tomcat。

还有一个问题;使用Java EE和GlassFish服务器部署我的应用程序有什么区别?

3 个答案:

答案 0 :(得分:10)

您需要在编译时类路径中包含包含这些类的JAR文件。

在您使用GlassFish服务器的特定情况下,这是/glassfish/lib/javaee.jar。您可以将类路径指定为-cp命令的-classpath(或javac)参数。它是一个以分号分隔的磁盘文件系统路径字符串,指向应包含在编译时类路径中的JAR文件和/或类文件夹。

javac -cp /path/to/glassfish/lib/javaee.jar UserBean.java

javac一旦遇到import引用的未知类,就会在那里查看,以便它可以验证您是否以正确的方式使用它。

这在技术上与Java EE无关。这只是基本的Java。我建议在深入了解Java EE之前先了解它。

如果您使用的是IDE,那么只需将目标服务器作为“Targeted Runtime”附加到项目中即可。然后,IDE将自动对构建路径(编译时类路径)执行所有操作。

答案 1 :(得分:8)

在netbeans 7.3中,您可以右键单击项目查看器中的libraries文件夹,选择“添加库”选项,然后从列表中选择“Java EE 6 API库”。

答案 2 :(得分:2)

在NetBeans IDE 8.0中,它与上面针对7.3版所描述的略有不同

  1. 右键单击Java EE中的Libraries项目
  2. 选择Import...
  3. 根据您使用的版本选择Java EE 6 API LibraryJava EE 7 API Library
  4. 点击Import Library按钮
  5. 选择刚导入的库,然后按Add Library按钮。