23
respostas

The declared package "br.com.alura" does not match the expected package

Professor, esse erro acontece no eclipse quando eu tento mover a pasta br para dentro do diretorio br.com.alura, isso acontece com todos os pacotes no eclipse, como eu consigo resolver isso?

23 respostas

Renato, este formato de ter um diretório após o diretório src ainda não tem suporte pelo eclipse (Não consegui fazer também). O que você pode fazer é trabalhar pela ide (mesmo com erros) e compilar e executar por linha de comando ou se quiser trabalhar pelo eclipse, usar apenas o module-info. Infelizmente isso ainda é uma limitação.

Professor, como eu faço para executar os comandos do module-path sem precisar criar o diretorio br.com.alura?

Você pode colocar no diretório src/ os pacotes br/com/alura/{pacotes específicos}, apenas tem que lembrar que o arquivo module-info.java tem que estar no mesmo nível do pacote br, ou seja, dentro de src. =)

Estou tentando executar o seguinte comando:

javac -d mods\br\com\alura --module-path mods src\br\com\alura\modelo\dominio\Categoria.java src\br\com\alura\modelo\dominio\Livro.java src\br\com\alura\modelo\dominio\NotaFiscal.java src\br\com\alura\http\dao\LivroDAO.java src\br\com\alura\nf\servico\NotaFiscalServico.java src\br\com\alura\nf\subscriber\NotaFiscalSubscriber.java src\br\com\alura\nf\util\NotaFiscalUtil.java src\br\com\alura\Principal.java

Aparece a seguinte mensagem:

Usage: javac use --help for a list of possible options

algo esta errado?

Como você não quer mais o diretório br.com.alura, você pode criar apenas uma pasta mods e colocar os arquivos compilados nele.

javac -d mods --module-path mods ...

=)

javac -d mods --module-path mods src\br\com\alura\modelo\dominio\Categoria.java src\br\com\alura\modelo\dominio\Livro.java src\br\com\alura\modelo\dominio\NotaFiscal.java src\br\com\alura\http\dao\LivroDAO.java src\br\com\alura\nf\servico\NotaFiscalServico.java src\br\com\alura\nf\subscriber\NotaFiscalSubscriber.java src\br\com\alura\nf\util\NotaFiscalUtil.java src\br\com\alura\Principal.java

Executei o comando desta forma e ainda aparece a mensagem

Usage: javac use --help for a list of possible options

Tenta colocar a barra após mods para ver se é porque o compilador não está identificando como um diretório.

javac -d mods\ --module-path mods ...

Executei o comando java --help no prompt e o modelo do comando é -d module name --describe-module module name

Mas você está tentando compilar ou executar? Lembrando que se for compilar é o javac, se for executar é o java. Ambos tem os seus "--help" específicos.

Estou tentando compilar com module path, executei o comando javac --help e diz que o comando deve ser -d directory Specify where to place generated class files

Executei o comando aqui para exemplo.

javac -d modules --module-path modules src\br.com.alura\br\com\alura\modelo\dominio\Categoria.java

E ele criou a pasta modules com o Categoria.class dentro.

Você está na raiz do projeto?

c:\Users\Renato Nobrega\eclipse-workspace\1755-aula5-novidades-java-elivraria-master> javac -d modules --module-path modules src\br\com\alura\modelo\dominio\Categoria.java

error: file not found: src\br.com.alura\br\com\alura\modelo\dominio\Categoria.java

Está correto. Tenta criar uma pasta com outro nome, igual eu fiz no exemplo ai em cima.

agora funcionou, tinha esquecido de tirar o diretorio br.com.alura e rodei o comando javac -d modules --module-path modules src\br\com\alura\modelo\dominio\Categoria.java

Legal!! =)

como faço agora para executar o module path?

tentei o comando java --module-path modules src\br\com\alura\Principal.java e da esse erro:

src\br\com\alura\Principal.java:7: error: package br.com.alura.http.dao does not exist import br.com.alura.http.dao.LivroDAO; ^ src\br\com\alura\Principal.java:8: error: package br.com.alura.modelo.dominio does not exist import br.com.alura.modelo.dominio.Livro; ^ src\br\com\alura\Principal.java:9: error: package br.com.alura.modelo.dominio does not exist import br.com.alura.modelo.dominio.NotaFiscal; ^ src\br\com\alura\Principal.java:10: error: package br.com.alura.nf.util does not exist import br.com.alura.nf.util.NotaFiscalUtil; ^ src\br\com\alura\Principal.java:16: error: cannot find symbol List livros = new LivroDAO().listar(); ^ symbol: class Livro location: class Principal src\br\com\alura\Principal.java:16: error: cannot find symbol List livros = new LivroDAO().listar(); ^ symbol: class LivroDAO location: class Principal src\br\com\alura\Principal.java:31: error: cannot find symbol NotaFiscalUtil util = new NotaFiscalUtil(); ^ symbol: class NotaFiscalUtil location: class Principal src\br\com\alura\Principal.java:31: error: cannot find symbol NotaFiscalUtil util = new NotaFiscalUtil(); ^ symbol: class NotaFiscalUtil location: class Principal src\br\com\alura\Principal.java:33: error: cannot find symbol util.emitir(new NotaFiscal(nome)); ^ symbol: class NotaFiscal location: class Principal 9 errors error: compilation failed

O comando abaixo é para executar =)

java --module-path modules -m br.com.alura/br.com.alura.Principal

Error occurred during initialization of boot layer java.lang.module.FindException: Module br.com.alura not found

como seria executar o comando sem o modulo br.com.alura?

Com o module-path, você precisará de um módulo. Mesmo que não tenha aquele diretório "br.com.alura", você precisará ter um arquivo module-info.

E a ideia é que seu arquivo tenha o nome do módulo.

module br.com.alura { }

O arquivo é compilado junto com as outras classes e no momento de executar, você utiliza o comando que eu informei acima.

eu criei o arquivo module-info.java com nome br.com.alura dentro da pasta src no mesmo nivel da pasta br, tenho que criar esse arquivo dentro da pasta modules tambem?

Não, o que você precisa é compilá-lo para pasta modules.

javac (invoca o compilador) -d modules (vai criar uma pasta chamada modules, caso não exista) --module-path modules (o caminho do módulo será a pasta modules) src/ ... (classes que serão compiladas no module-path)

É isso que o comando faz.

Quando você invoca o java, você está chamando a jvm que carregará as classes compiladas no module-path e fará a execução do programa a partir da classe Principal.

Por isso que no comando

java --module-path modules -m br.com.alura/br.com.alura.Principal

Com o --module-path você indica o caminho que encontram os módulos (diretório modules), com o -m você informa qual o módulo que contém a sua classe com o método main (no nosso caso é a classe br.com.alura.Principal do módulo br.com.alura (nome definido no module-info).

Professor, quando executo o comando java --module-path modules -m br.com.alura/br.com.alura.Principal ocorre o mesmo erro.

Error occurred during initialization of boot layer java.lang.module.FindException: Module br.com.alura not found

Professor, finalmente encontrei o problema, acontece que estava faltando compilar o arquivo module-info.java, adicionei o caminho src\module-info.java ao comando javac -d modules --module-path modules... e agora consegui executar com module-path, obrigado pela atenção e paciencia!