Estamos fazendo um aplicativo da web com AngularJS e gostamos da ideia de usar o Bower para gerenciamento de dependências e o Grunt para construir, executar testes etc. ( Yeoman )
O servidor é feito com Java usando Maven, então é claro que gostaríamos de mvn install
construir tudo de forma simples (aplicação web + servidor)
Então, qual abordagem você adotou e por quê?
1) Trate-os como duas aplicações diferentes, que de fato são. Portanto, o uso de diferentes métodos / ferramentas de construção é aceitável.
2) Esqueça o Grunt Bower, use os plug-ins Maven para construir, executar testes e gerenciar dependências para o aplicativo da web. Se for esse o caso, quais?
3) Use o plugin Maven exec para chamar Grunt para construir o front-end webapp. Eu vejo isso mais como um hack do que uma solução.
4) Outro.
A abordagem mais fácil de integrar com o Jenkins é uma vantagem.
Desde já, obrigado!
Respostas:
Depois de trabalhar com cada ferramenta de pipeline de ativos no kit de ferramentas Java por um tempo, cheguei a algumas conclusões:
Ferramentas baseadas em Java
Existem várias ferramentas, mas as mais populares são JAWR e Wro4J. O maior problema com ambos é que eles são principalmente baseados em Rhino (WRO4J agora tem algum suporte para Node) e Rhino é lento em comparação com ferramentas baseadas em Node. Você também deve considerar que as ferramentas JavaScript estão amadurecendo rapidamente, portanto, você deve procurar ferramentas que podem ser movidas rapidamente.
WRO4J - O suporte é ótimo, a integração do Maven E do Eclipse é ótima, a lista de plug-ins é extensa e o framework é flexível o suficiente para que com um pouco de esforço você possa escrever um plug-in para o que precisar. Se você está confinado a um pipeline de ativos baseado em Java, este é o caminho a seguir. O problema com o Wro4j é que ele é lento (mesmo quando inicia os processos do Node) em relação às ferramentas baseadas no Node.
Para dar alguns números do mundo real, compilando e concatenando 25 pacotes de recursos contendo LESS, CSS CoffeeScript e JavaScript leva cerca de 35s ao usar Rhino e ~ 15s ao usar o suporte de Node do Wro4j em um iMac 2013 com 16G de RAM. Usar o Grunt + Node leva cerca de 2s no meu MacBook Air insignificante.
JAWR - As integrações e a lista de recursos são muito boas, mas os documentos não são bons e escrever seus próprios plug-ins pode ser um pouco complicado. Quando escrevi este post originalmente, o JAWR estava no meio de um hiato de 4 anos, mas agora está de volta ao desenvolvimento ativo em janeiro de 2014. Se você decidir investigar as ferramentas Java, vale a pena investigar.
Ferramentas Baseadas em Nó (integrado com Ant / Maven Builds)
Grunt - é fácil, tem um ecossistema de plugins fantástico e a comunidade é enorme. Se há algo que você precisa fazer, pode apostar que há um plugin para isso - possivelmente até mesmo um escrito pelos criadores do grunt. As principais críticas do Grunt são que ele é orientado por configuração, o que torna a configuração muito fácil, mas não é o "jeito do nó". Também vale a pena mencionar que as tarefas do Grunt não são facilmente combináveis, portanto, para um pipeline de construção de JavaScript complexo, o Grunt pode não ser ideal.
Gulp - Gulp é a alternativa de rápido crescimento ao Grunt. É simultâneo por padrão e usa fluxos para evitar gravações temporárias no sistema de arquivos, o que pode acelerar consideravelmente sua construção. Gulp é muito idiomático e tem ênfase em código> configuração e, embora isso lhe dê muito poder, não é ideal para equipes que não têm uma competência central em JavaScript.
O único problema potencial para ferramentas baseadas em JavaScript é que você terá que ter Node , npm e grunt-cli / gulp em qualquer máquina que precise fazer a compilação. Se você não tiver acesso às suas máquinas de CI ou não estiver usando implantações baseadas em artefatos, isso pode ser difícil de vender.
Integrar isso ao seu projeto Maven é muito fácil e você tem algumas opções. Você pode usar o plugin Maven ant-run , pode executar uma tarefa ant exec e chamá-la do Maven ou, o melhor de tudo, pode apenas usar a tarefa maven exec .
Abaixo está o código para integrar isso ao ciclo de vida do Maven usando o plug-in exec, se isso for útil para alguém.
fonte
Maven
construção se agrunt
construção falhar?Para quem ainda está procurando por mais informações sobre este tópico, um dos criadores do Yeoman tem um bom artigo (escrito alguns meses depois que esta pergunta foi feita originalmente) que expande a resposta original com um pouco mais de detalhes:
fonte
Depois, há também o frontend-maven-plugin: https://stackoverflow.com/a/19600777/320399 Ele baixa o Node e o NPM para você (localmente no seu projeto), baixa o Grunt por meio desse NPM (executado por aquele Node) e então executa o Grunt (por meio desse Node). É autoinicializado e você não precisa do Node instalado na máquina para construir o projeto. Apenas um comando; mvn install.
fonte
Você pode querer verificar http://jhipster.github.io/ : é um gerador Yeoman, que gera um aplicativo que tem Maven, Grunt e Bower todos trabalhando juntos.
É um pouco como sua terceira opção, mas tudo está configurado para você, o que não é tão fácil. Ele também está gerando os serviços AngularJS e Java REST básicos para você.
fonte
depois de algumas horas gastas com esse problema, posso dizer o seguinte:
maven e grunt não tocam bem, mas podem ser aplicados ..
Aqui está uma descrição do plugin para executar o Grunt via compilação Maven
Eu espero que isso ajude :)
fonte