Erros de aninhamento do caminho de construção do Eclipse

122

Estou trabalhando em um webapp JSP / Servlet / Tomcat simples para minha classe. O professor nos pediu para usar uma estrutura de pastas um pouco diferente da estrutura de projeto dinâmico da Web padrão. Em vez de usar a pasta webcontent, ele deseja todo o nosso código-fonte em src / main / java e src / main / webapp.

Quando executo o aplicativo, meu arquivo de boas-vindas é exibido bem, mas quando tento acessar meus servlets, recebo:

 Http 500 SEVERE: Allocate exception for servlet InitDb

java.lang.ClassNotFoundException. Tenho certeza de que é um erro no caminho da construção. Eu tenho final / src no caminho da construção, mas estou recebendo o aviso

"Cannot nest 'final/src/main/webapp/WEB-INF/classes' inside 'final/src'. To enable the    nesting exclude 'main/' from 'final/src'

insira a descrição da imagem aqui

Eu tenho isso no meu assembly de implantação:

<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 

Quando eu excluo main / o aviso desaparece, mas não resolve o problema. Eu agradeceria qualquer conselho. Obrigado.

Everhill
fonte

Respostas:

309

Eu tive o mesmo problema, mesmo quando criei um novo projeto. Eu estava criando o projeto Java no Eclipse, em seguida atualizá-lo e, em seguida, entrando nas propriedades do caminho de construção java, removendo src/e adicionando src/main/javae src/test/java. Quando executo a atualização do Maven, ele costumava dar erro de caminho aninhado.
Então finalmente percebi - porque eu não tinha visto essa entrada antes - há uma <sourceDirectory>src</sourceDirectory>linha no arquivo pom escrita quando eu a mando. Foi resolvido após a remoção.

acheron55
fonte
1
Este é apenas um dos muitos truques aleatórios. Não estou explicando o porquê. Assim, menos útil.
smwikipedia
4
Acabei de mudar o nome da entrada pom para scr / main / java e tudo estava bem. Obrigado pelo post acheron55
Beezer
você colocou lá? ou de onde vem?
Linha
23

Eu queria dar uma resposta não-mavenish a esta discussão.

Devido ao controle de versão e a estritos motivos de estrutura de diretórios, não consegui seguir a resposta de Acheron (a melhor resposta) de fazer algo semelhante à remoção src/e adição src/main/javae src/test/javaao caminho de compilação.

Na verdade, eu estava enfrentando esse problema aninhado por algumas semanas. A resposta para o problema está sugerida na mensagem de erro:

To enable the nesting exclude 'main/' from 'final/src'

Consertar

No seu caminho de construção, você precisa editar o seu Inclusion and Exclusion Patternsclicando em Excluded: (None)e depois Edit...:

  1. Vá para o navegador e pressione o botão direito do mouse no projeto
  2. Caminho de Construção
  3. Configurar caminho de construção
  4. Origem (guia)

Padrões de exclusão

Lá você pode adicionar main/webapp/WEB-INF/classescomo um Exclusion Pattern. Em seguida, deve permitir que você adicione main/webapp/WEB-INF/classesao caminho de compilação como uma pasta de origem separada.

heez
fonte
10

Tente o seguinte:

Na guia bibliotecas:

Eclipse -> right click on project name in sidebar -> configure build path -> Libraries

Remova as bibliotecas de aplicativos da web:

click on "Web App Libraries" -> click "remove"

Adicione-os novamente em:

click "Add Library" -> click to highlight "Web App Libraries" -> click "next" -> confirm your desired project is the selected option -> click "Finish"

Destacando "Bibliotecas de aplicativos da Web":

Destacando "Bibliotecas de aplicativos da Web"

Sireesh Yarlagadda
fonte
3

Eu tive o mesmo problema e a resposta correta acima não funcionou para mim. O que fiz para resolvê-lo foi acessar Build Path->Configure Build Pathe, na guia fonte, removi todas as fontes (que tinham apenas uma fonte) e as reconfigurei a partir daí. Acabei removendo o projeto do eclipse e importei novamente o projeto maven para resolver o erro.

Hatem Jaber
fonte
3

No meu caso, eu tenho um projeto de natureza gradle no eclipse , o problema estava em a build.gradle, onde isso sourceSetsé especificado:

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
 }

Este parece funciona bem com IntelliJ , no entanto parece que eclipse não como um ninho src, src/java, src/resources. No eclipse , devo alterá-lo para:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}
albciff
fonte
3

Aqui está uma solução simples:

  1. Clique com o botão direito do mouse em project >> properties >> build path;
  2. Na guia Origem, selecione todas as pastas de origem;
  3. Remova eles;
  4. Clique com o botão direito do mouse no projeto, Maven >> Atualize o projeto.
abhijeet104
fonte
2

Você precisa separar suas fontes e seu diretório de destino para onde vai a saída da compilação. Também é importante observar que nenhum arquivo de classe pode acabar no diretório de origem. Isso não é contra o conselho do professor - na verdade, ele está promovendo a estrutura de fontes padrão para ./src/main/java e ./src/main/webapp. O segundo deve conter, por exemplo. o arquivo WEB-INF / web.xml obrigatório, mas você nunca colocará classes reais lá.

O que você precisa alterar é o diretório de destino. Sugiro seguir os mesmos padrões e escolher o nome "./target" para isso. Todos os arquivos criados entrarão aqui e o empacotamento resultará em um artefato implementável correto. Se você migrar para o uso do maven mais tarde, também ajudará a fazer isso de maneira repetida por script.

Espero que isso esclareça seu problema.

Kristof Jozsa
fonte
1

A solução aceita não funcionou para mim, mas fiz algumas pesquisas nas configurações do projeto.

A solução a seguir o corrigiu para mim, pelo menos, se você estiver usando um projeto dinâmico da Web:

  1. Clique com o botão direito do mouse no projeto e depois nas propriedades. (ou alt-enter no projeto)
  2. Em Assembly de implantação, remova "src".

Você deve poder adicionar o src / main / java. Ele também o adiciona automaticamente ao Deployment Assembly.

Advertência: Se você adicionou um src / test / java, observe que ele também será adicionado ao Deployment Assembly. Geralmente, você não precisa disso. Você pode removê-lo.

Chade
fonte
1

Isso começou a me levar a um buraco enorme de correção de falhas com o Eclipse, no entanto, acabei de excluir o projeto do Eclipse e reimportá-lo para corrigi-lo.

Carson
fonte
0

Para o compilador Eclipse funcionar corretamente, você precisa remover final / src do caminho de origem e adicionar final / src / main / java. Isso também pode resolver seu problema, pois agora o diretório de construção não estará dentro da pasta de origem Java.

Sasha O
fonte
0

STS IDE

Depende de qual pasta um está dizendo "Usar como pasta de origem" para. Na estrutura da imagem, se alguém diz para a pasta "target" ou "gerado", ele recebe o erro "aninhado". Mas na pasta "cxf", que é a última, mencionada na seção 'plugin' do pom.xml e onde começa a estrutura do pacote (como mostrado no arquivo .wsdl), ie - a pasta correta para fazê-lo 'source' , então não há erro

yrz
fonte
0

Problema semelhante. Os seguintes passos, o problema foram resolvidos:

  1. Remova o projeto no eclipse.
  2. Exclua o arquivo .Project e. Pasta de configurações.
  3. Importe o projeto como projeto maven existente novamente para eclipsar.
Maneira
fonte
-3

Faça duas pastas: final/src/para armazenar o código java de origem e final/WebRoot/.

Você não pode reunir a fonte e a raiz da web. Eu acho que você pode entender mal o seu professor.

Jimmy Zhang
fonte