Criando projetos Java EE com o Maven

13

Desenvolvo aplicativos da web Java EE com o Eclipse há cerca de um ano. Meu empregador não usa o Maven, mas quanto mais eu leio, mais convencido estou de que o Maven + Hudson será muito benéfico para nós. Primeiro, porém, tenho que me sentir confortável com essas tecnologias no meu tempo livre, para poder criar uma prova de conceito.

No momento, ainda sou um novato no Maven. Existe um conjunto de práticas recomendadas para criar aplicativos da web Java EE com o Maven? Por exemplo, eu poderia criar um projeto com um arquétipo básico e adicionar todos os JARs necessários colocando dependências no POM para o contêiner do servlet, EJB, EclipseLink, etc ... Isso pode funcionar, mas pode não ser o melhor maneira de fazer isso. Agradeço imensamente qualquer orientação que você possa fornecer sobre esse tópico.

Michael
fonte

Respostas:

10

Não se preocupe com arquétipos até mais tarde

Para todas as informações que você precisa saber sobre o Maven, leia alguns dos livros em seu site . No entanto, isso é um pouco exagerado para o que você está tentando alcançar.

Para começar, faça um layout do aplicativo da Web seguindo a estrutura padrão do Maven para aplicativos da Web da seguinte maneira. (Você não precisa de um arquétipo do Maven para isso, são apenas várias pastas padrão, você pode fazer isso em 2 minutos).

  • src/main/java - contém seu código Java de produção
  • src/main/resources - contém seus recursos do caminho de classe de produção (por exemplo, contextos Spring)
  • src/main/webapp - (contém WEB-INF / web.xml, mas nenhuma pasta lib)
  • src/test/java - contém seu código Java de teste
  • src/test/resources - contém seus recursos de teste (por exemplo, feeds XML de exemplo para teste de serviço da web etc.)

Plugins básicos

O próximo passo é escolher um monte de plugins. Os suspeitos comuns são, obviamente, os que suportam recursos limpos, compilados e recursos (fazem parte do Maven, mas você pode configurá-los). Então você terá o testador de unidade infalível e o plug-in WAR. Isso é suficiente para criar um aplicativo da web muito básico.

Plugins mais avançados

O próximo passo é apresentar os plugins Findbugs e PMD, que fornecerão informações detalhadas ao seu código e relatarão vários problemas em potencial. Você provavelmente desejará ter o JXR para código-fonte de referência cruzada, lista de tags para rastrear tags TODOs e REFACTOR e assim por diante. Sobre tudo...

... Use o plugin Jetty para aplicativos da web

Use o plug-in Jetty para executar seu arquivo WAR no seu IDE para facilitar a depuração. É rápido e pequeno e faz o trabalho muito rápido. Tendo o Jetty como parte de sua compilação Maven, seu projeto pode ser testado em qualquer máquina sem a necessidade de um IDE com alguns servidores complexos configurados. Ele também permite que você declare dependências em outros arquivos WAR, o que significa que você pode gerar um ambiente de trabalho completo que consiste em vários aplicativos da Web, todos com um único comando "mvn clean jetty: run". Isso funciona em qualquer lugar e você pode até fornecer uma configuração de JNDI de teste para que suas fontes de dados injetadas pelo Spring sejam todas configuradas externamente. Se você combinar essa abordagem do Jetty com uma página HTML de demonstração padrão (src/test/resources/demo.html) você economizará muitas horas do desenvolvedor tentando obter um ambiente local de trabalho. Um comando e pronto. Simples.

Configurando seu IDE

Com o Maven, é fácil, pois todos os garotos grandes o apóiam: Eclipse, Netbeans e, claro, meu Intellij favorito. Basta apontar seu IDE para o pom.xml e ele resolverá todas as dependências listadas para você. Chega de brincar com isso WEB-INF/lib. No Eclipse, você normalmente usa Arquivo | Importar ... | Projeto Maven | pom.xml.

Integrando com Hudson

Primeiro instale o Hudson (é apenas um aplicativo da web) e, em seguida, direcione seu sistema de controle de versão para que ele verifique a versão apropriada. Sua etapa final é configurá-lo para que ele use o Maven para fazer a compilação. Obviamente, o Maven precisará ser instalado na sua máquina de compilação (supondo que seja diferente da sua máquina de desenvolvimento).

Hudson faz a captura instantânea apenas

Faça com que o Hudson execute compilações de instantâneos e deixe as compilações de liberação para um processo manual. Usar essa abordagem significa que os desenvolvedores podem compartilhar seu código sob uma revisão de instantâneo (por exemplo, 1.0.0-SNAPSHOT) e somente se for capaz de passar a compilação será compartilhado no repositório da equipe. Normalmente, o Hudson executará "mvn clean deploy", embora a inclusão do objetivo "site" também possa fazer parte do seu processo, pois ele criará um pequeno site de projeto para cada build. Os desenvolvedores da equipe terão a compilação instantânea atualizada automaticamente incluída em seu projeto através do processo de gerenciamento de dependências do Maven.

O Hudson fornece uma variedade de plugins que podem suportar todo tipo de métrica. Meu favorito pessoal é acompanhar o número de testes aprovados por projeto ao longo do tempo. É ótimo mostrar à gerência que sua contagem e cobertura de testes unitários estão sempre aumentando.

Diretrizes gerais de configuração

Divida seus repositórios em pelo menos a seguinte estrutura:

  • team-release - Todos os seus artefatos de produção liberados vão aqui
  • team-snapshot - Todos os seus artefatos de desenvolvimento de snapshot vão aqui
  • versão de terceiros - Todas as suas bibliotecas de terceiros de suporte estão aqui (por exemplo, Spring, Hibernate etc)

As contas de usuário do desenvolvedor não devem poder gravar nos repositórios da equipe, instantâneo ou release. Isso permitiria que um desenvolvedor ignorasse Hudson se estivesse com pressa e rapidamente se tornasse a norma.

Sempre baixe as assinaturas de origem, javadocs e SHA para todos os seus terceiros. Jarvana é um excelente explorador de repositórios para todas as classes difíceis de encontrar.

Considere instalar um gerenciador de repositório como o Nexus ou o Artifactory para permitir um melhor controle sobre o seu repositório sempre crescente.

Gary Rowe
fonte
2
Sonar também é bastante impressionante e se encaixa bem com o Maven / Hudson
Kevin
1
Absolutamente. No momento, se eu estiver trabalhando em um projeto Maven em uma equipe, esperaria que um Findbugs / PMD local resolvesse os problemas mais rapidamente, então um trabalho do Sonar após a criação de um Jenkins com implantação de artefato no Nexus ou Artifactory. Isso fornece fácil localização de artefatos e fornece análise de impacto ("onde usado") para esses artefatos em todo o ecossistema do projeto. Juntamente com o git, o JIRA e o Fisheye, você tem um incrível processo de desenvolvimento disponível para você.
Gary Rowe
1
Gary, o link em pdf expirou
user1787812
1

O Maven fornece muitos arquétipos

mvn archetype:generate

imprimirá uma lista dos disponíveis.

A principal diferença entre arquétipos Java simples com arquétipos J2EE é que os diretórios para jsp e imagens serão gerados. Se você iniciar um novo projeto J2EE, considere usar um deles desde o início.

À medida que seu projeto cresce, você pode adicionar mais dependências. Pessoalmente, prefiro começar com uma coleção mínima de dependências (por exemplo, arquétipo básico do J2EE) e depois gradualmente adicionando o que preciso.

andreasmk2
fonte
0

Eu fiz isso partindo de um arquétipo básico e adicionando todos os bits, e tenho certeza de que essa não é uma maneira muito boa. Mas acho estranho também o contrário; selecionar o que é um bom arquétipo é difícil, a menos que você já esteja “profundamente versado nos segredos”. Isso é muito parecido com o conhecimento mágico (ao contrário de informações técnicas detectáveis ​​sensíveis) para o meu gosto ...

Donal Fellows
fonte
E acho que é uma boa pergunta. Gostaria de ter uma resposta melhor.
Donal Fellows
É muito apreciado, senhor.
Michael Michael
0

O Maven fornece uma maneira de criar projetos a partir de modelos chamados Arquétipos . Você usa o comando mvn archetype:generatepara escolher um interativamente . Você também pode especificar um diretamente.

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-j2ee-simple \
    -DarchetypeVersion=1.0

Tudo em uma linha.


fonte
0

Eu tenho usado Maven e Hudson nos últimos três meses. Isso me ajuda a verificar regularmente a integridade da base de código executando todos os testes de unidade, gerando um relatório de teste. Você pode tentar isso.
Você também pode tentar o Spring Roo. É uma ferramenta RAD para criar um projeto J2EE baseado em Spring.

haylem
fonte