Prós e contras do uso de sbt vs maven no projeto Scala [fechado]

138

Qual ferramenta de criação é a melhor para o Scala? Quais são os prós e os contras de cada um deles? Como determinar qual deles usar em um projeto?

Konstantin Solomatov
fonte
5
Mudei de projetos Maven para Gradle para Scala, devido ao seu suporte superior à compilação de vários módulos. A experiência do Twitter com o SBT é descrita por eles como "dor ofuscante" e eles estão tentando se afastar (com o Maven como uma brecha nesse processo).
Ben Manes
24
Outra legal fechada pergunta ...
Cedric H.
14
Eu vejo tantas perguntas boas que estão fechadas; Não sei quem dá o poder a essas pessoas de decidir arbitrariamente encerrar uma pergunta ou não. Nem presto atenção se eles estão próximos ou não.
user1888243
2
Aceita. Felizmente, temos 2 respostas antes que esta pergunta seja encerrada. Ruim para quem vota para encerrar esta pergunta ... #
2100 hqt

Respostas:

83

Estamos usando o Maven para criar projetos Scala no trabalho porque ele se integra bem ao nosso servidor de IC. Poderíamos simplesmente executar um script de shell para iniciar uma compilação, é claro, mas temos muitas outras informações vindas do Maven que queremos acessar no CI. Essa é a única razão pela qual posso pensar em usar o Maven para um projeto Scala.

Caso contrário, basta usar o SBT. Você obtém acesso às mesmas dependências (realmente a melhor parte do maven, IMHO). Você também recebe a compilação incremental, que é enorme. A capacidade de iniciar um shell dentro do seu projeto, o que também é ótimo.

O ScalaMock funciona apenas com o SBT e você provavelmente desejará usá-lo em vez de uma biblioteca de zombaria Java. Além disso, é muito mais fácil estender o SBT, pois você pode escrever o código de escala completo no arquivo de construção, para que você não precise passar por todo o rigamarole de escrever um Mojo.

Em resumo, use o SBT, a menos que você realmente precise de uma forte integração ao servidor de IC.

mblinn
fonte
21
Não discordo de nenhum dos itens acima, mas gostaria de ressaltar que estou escrevendo o ScalaMock 3 , cujo principal objetivo é facilitar o suporte a outros sistemas de compilação.
Paul Butcher
1
Apenas para completar, vale a pena mencionar que o ScalaMock 2 funciona bem com qualquer sistema de construção (é apenas um jar), desde que você não precise fazer uso de zombarias geradas (ou seja, desde que você só precise zombar de características / interfaces )
Paul Butcher
3
por que eles não escreveram uma compilação incremental para o maven? IMHO, sbt é um arquétipo de uma síndrome de NIH não tratada ...
Cpt. Senkfuss
1
Por que problemas com o IC devido ao SBT?
Daniel
21

A questão corre o risco de gerar muitas opiniões; seria melhor ter uma lista clara de requisitos ou uma descrição do seu ambiente, conhecimento prévio etc.

FWIW, há mais opiniões neste segmento da lista de discussão do scala .

Meus 2c são: Vá com sbt se você não tiver requisitos específicos

  • para projetos simples, é totalmente fácil (você nem precisa de um arquivo de construção até ter dependências)
  • é comumente usado em projetos de código aberto Scala. Você pode aprender facilmente sobre configuração examinando os projetos de outras pessoas. Além de muitos projectos assumem que utiliza sbt e fornecer-lhe ready-made cópia + colar instruções para adicioná-los como uma dependência ao seu projeto.
  • se você usar o IntelliJ IDEA, ele poderá ser totalmente integrado. Você pode fazer com que o IDEA use o sbt para compilar continuamente seu projeto e vice-versa, você pode usar o sbt para gerar rapidamente projetos do IDEA . O último é extremamente útil se você estiver em um ciclo de 'snapshot', dependendo de outras bibliotecas que são transferidas de uma versão menor para outra - basta fechar o projeto, atualizar a versão no arquivo de compilação, executar novamente o gen-ideatarefa e abra novamente o projeto: atualizações feitas.
  • vem pronto com a maioria das tarefas que você precisa ( compile, test, run, doc, publish-local, console) - a consoleé uma das melhores características.
  • algumas pessoas destacam o recurso de que as dependências podem ser repositórios de origem diretamente adquiridos no GitHub. Eu não usei isso, então não posso comentar aqui.

Algumas pessoas odeiam o sbt porque ele usa o Ivy para gerenciamento de dependências (não posso comentar seus prós e contras, mas na maioria das vezes não é um problema), algumas pessoas odeiam o sbt porque você especifica o arquivo de compilação em termos de um Scala DSL em vez de XML. Algumas pessoas ficaram desapontadas com o formato do sbt alterado da v0.7 para a v0.10, mas obviamente a migração não afetará você se você começar do zero.

0__
fonte
27
Eu odeio o sbt porque seu abuso de operadores simbólicos e algumas decisões estúpidas, como os formatos de definição de .sbt e .scala, mas os colocam em locais diferentes, e as instruções em .sbt devem ser separadas por pelo menos uma linha vazia etc. Os documentos do sbt estão melhorando, mas não é bom o suficiente neste momento. O que mais sinto falta é de alguns arquivos de amostra .sbt / .scala completos (mínimos ou complexos do mundo real) explicados linha por linha, cobrindo todos os recursos sbt. Dito isto, eu uso sbt diariamente, porque o Maven é muito mais ruim.
Xiefei 01/07
6
Pena que esta questão foi encerrada, tenho certeza de que também existem diferenças de fato: por exemplo, este trecho do livro Manning sobre SBT: "Se houver dependências entre os objetivos do Maven (digamos que um objetivo produz um arquivo que é consumido por outro) então você não pode paralelizar sua compilação com o Maven. Com o sbt, é necessário especificar uma dependência explícita entre as tarefas. Isso permite que o sbt execute tarefas em paralelo POR PADRÃO. Se a tarefa A depende de B e C também depende de B, então sbt executa a tarefa B e, em seguida, executa A e C em paralelo. " Espero que este comentário ajude alguns leitores.
Jevinhodev2
19
Achei esse tópico muito útil. Costumo pensar que os moderadores do Stackoverflow fecham os threads com muita ansiedade. Quem se importa se eles estão "fora de tópico" quando geralmente são exatamente o que os usuários estão procurando (e encontram através de pesquisas na web). É como se os mods Stackoverflow estivessem tentando recriar intencionalmente o xkcd 979 .
Ville
3
@Ville Meus pensamentos também. A redução de votos, a edição e o fechamento tornaram-se muito agressivos.
ankush981
2
Para quem está vendo isso agora, as reclamações de @ xiefei foram tratadas. O SBT eliminou muitos dos operadores / sintaxe mais personalizados, e as instruções nos arquivos / sbt não precisam mais de separações de espaço em branco.
Grogs 28/03