Erro “pacote javax.inject não existe” durante a compilation com o javac na linha de comando

Estou dando meus primeiros passos para aprender JSF. Eu encontrei este livro interessante chamado “Core JavaServer Faces Third Edition”.

Tentando compilar o primeiro exemplo, você pode baixar o código-fonte em: http://horstmann.com/corejsf/ . Quando eu digito o seguinte na linha de comando

javac UserBean.java 

Eu recebo erros:

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

Eu fiz o download do Java EE, Ant e GlassFish.

Aqui está um piscar de olhos da minha linha de comando:

 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> 

Foi googling como compilar um aplicativo Java EE para a última semana, mas sem nada de útil.

Alguém poderia me ajudar com isso, por favor, eu preciso resolver isso para que eu possa avançar na minha tarefa de aprender JSF.

SP: Eu quero aprender a compilar os aplicativos Java EE com as mãos nuas antes de passar a compilar meus projetos Java EE com o NetBeans. Eu prefiro aprender a trabalhar com o GlassFish primeiro, então talvez mais tarde eu considerarei o Tomcat.

Mais uma pergunta; Qual é a diferença entre usar o Java EE e o servidor GlassFish para implantar meus aplicativos?

Você precisa include o arquivo JAR contendo essas classs no caminho de class de tempo de compilation.

No seu caso particular com o servidor GlassFish, esse é o /glassfish/lib/javaee.jar . Você pode especificar o caminho de class como argumento -cp (ou -classpath ) do comando javac . É uma cadeia semicolonseparada de caminhos do sistema de arquivos em disco apontando para arquivos JAR e / ou pastas de classs que devem ser incluídos no caminho de class de tempo de compilation.

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

javac irá procurar lá depois que encontrar uma class desconhecida que é referenciada pela import , para que ela possa, entre outras coisas, verificar se você a usou da maneira correta.

Isso tecnicamente não tem nada a ver com o Java EE. Este é apenas o Java básico. Eu sugiro aprender isso antes de mergulhar no Java EE.

Caso você esteja usando um IDE, então é só append o servidor de destino como “Tempo de execução direcionado” ao projeto. O IDE, então, fará automaticamente toda a magia no caminho de compilation (o caminho de class do tempo de compilation).

No netbeans 7.3, você pode clicar com o botão direito do mouse na pasta libraries no visualizador do projeto, escolher a opção ‘add library’ e, em seguida, selecionar ‘Java EE 6 API Library’ da lista.

No NetBeans IDE 8.0, ele é um pouco diferente do descrito acima para a versão 7.3

  1. Clique com o botão direito em Libraries no Java EE seu projeto
  2. Selecione Import...
  3. Escolha Java EE 6 API Library ou Java EE 6 API Library Java EE 7 API Library dependendo da versão que você está usando.
  4. Clique no botão Import Library
  5. Selecione a biblioteca que você acabou de importar e pressione o botão Add Library .