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

我正在迈出学习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。

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

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

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

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

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

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

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

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

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

在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按钮。