.classpath e .project - verifique o controle de versão ou não?

87

Estou executando um projeto Java de código aberto que consiste em vários módulos em uma árvore de dependências. Todos esses módulos são subdiretórios em um repositório subversion. Para os iniciantes em nosso projeto, é muito trabalhoso configurar tudo isso manualmente no Eclipse.

Nem todos os nossos desenvolvedores usam eclipse. No entanto, estamos considerando apenas verificar os arquivos .classpath e .project para ajudar os novatos a começar. isso é uma boa ideia? Ou isso levaria a conflitos constantes nesses arquivos? Existe uma maneira alternativa de tornar o projeto mais fácil de configurar no Eclipse?

amarilhão
fonte

Respostas:

65

Definitivamente sim, como eu disse em " Você mantém seus arquivos de projeto sob controle de versão? "

"Carregue, configure, vá."

Mas ... isso é verdade apenas para configurações recentes do Eclipse3.5, onde os caminhos de construção suportam caminhos relativos :

O caminho de construção suporta caminhos relativos


E Eclipse3.6 seria melhor, pois oferece suporte a caminhos relativos para variáveis ​​de caminho em Linked Resources:

variável de caminho com caminho relativo
(desde 3.6M5)

VonC
fonte
2
Uau, eu não sabia que eles adicionaram isso ... Teria nos salvado de algumas dores
Uri
Parece que as imagens associadas a esta resposta estão off-line.
vkraemer
1
@vkraemer: true. Agora restaurei essas duas fotos, a primeira vinda de archive.eclipse.org/eclipse/downloads/drops/R-3.5-200906111540/… e a segunda de download.itemis.com/mirror/eclipse/R-3.6 -201006080911./… .
VonC
17

Definitivamente não - geralmente é uma ideia terrível distribuir arquivos de projeto via subversion. Especialmente porque alguém pode modificá-los de uma maneira estranha. Uma boa página na documentação do projeto é uma ideia muito melhor. Nosso projeto também possui muitos módulos e uma configuração complexa. Configuramos uma página de confluência que descreve como começar com o projeto em cada IDE populer - IntelliJ, Eclipse, NetBeans. Um arquivo README no Subversion contém as mesmas informações.

Bozhidar Batsov
fonte
31
Eu não posso concordar. Pela minha experiência, é bom verificar esses arquivos para tornar o checkout o mais fácil possível. Alguém pode mudá-los de alguma maneira estranha? Alguém pode alterar o seu código de uma maneira estranha ...
Arne Deutsch
Arne, você deve fazer uma resposta, não um comentário.
amarillion
5
Os arquivos de projeto para qualquer IDE não fazem realmente parte de nenhum projeto - se você quiser distribuí-los - vá em frente - anexe-os ao artigo que mencionei. Geralmente, todos em uma equipe podem modificar os arquivos no repo, mas nem todos podem anexar novos arquivos a nós de documentação importantes, etc. É muito fácil para alguém esquecer de ignorar o classpath e os arquivos de projeto e confirmá-los quando não deveria. Mesmo se você os mantiver em subversão - você certamente deve mantê-los em algum lugar do lado ...
Bozhidar Batsov
8
-1, não poderia discordar mais. As configurações de projetos são uma parte crucial do trabalho diário com um projeto. As desvantagens de verificar acidentalmente as configurações incorretas são muito menores do que as vantagens de manter todos atualizados automaticamente. Afinal, você sempre pode voltar facilmente às versões anteriores.
Michael Borgwardt
7
Todos tem direito a uma opinião. Na verdade, eu nunca criaria um projeto baseado no sistema de projeto do Eclipse (ou qualquer outro IDE) em primeiro lugar ... Maven é a ferramenta de compreensão de projeto final e torna as configurações específicas do IDE obsoletas. A propósito, o tempo de perceber que algo está errado com as configurações atuais e voltar para a revisão anterior provavelmente não será diferente do tempo de ajustar as novas configurações você mesmo. Pelo menos na minha empresa, todos na equipe são notificados por e-mail se alguma intervenção do usuário for necessária após mudanças maiores.
Bozhidar Batsov
10

Eu voto não, mas isso é porque eu geralmente geraria esses arquivos do maven

Goibniu
fonte
m2e faz a maioria, mas não tudo para você
Junchen Liu
6

Na minha experiência, excluindo os casos limitados em que configurações puramente locais estão envolvidas, tudo deve estar no controle de origem. A lei do controle de origem é que tudo o que foi inserido deve funcionar por aqueles que o retiraram. Infelizmente, o eclipse costuma fazer com que coisas assim ocorram .classpath:

    <classpathentry kind="con" 
      path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7"/>

Portanto, no meu Mac isso funciona, e talvez alguém em um Mac tenha o mesmo JRE, mas não funcionará para mais ninguém.

Além disso, não há maneira fácil de contornar isso. O Eclipse sempre adicionará isso. EU QUERO ter o arquivo .classpath lá, porque existem alguns JARs de terceiros em nossa pasta lib onde nos preocupamos com o controle de versão, então nós os deixamos lá para que novos desenvolvedores não tenham que obtê-los . Estamos mudando para um sistema gerenciado, mas ainda temos dependências gerenciadas + não gerenciadas verificadas. Isso significa que todos os desenvolvedores precisam apenas garantir que dois diretórios estejam em seus.classpath s. Mas é melhor do que ter que corrigir seu JRE toda vez que você puxa e ter uma mudança em seu .classpath toda vez que você efetua um commit.

Eclipse faz algumas outras coisas boas para você, no entanto. O arquivo .project geralmente será o mesmo nas instâncias, então inclua-o. Mas a melhor coisa sobre o controle de origem do eclipse são as configurações de Run Configurations. Na guia "Comum" na caixa de diálogo Configurações de execução, salve as configurações para que apareçam para seus colegas nas listas de favoritos para Depurar e Executar. Para mim, vários .launcharquivos vão para o .settingsdiretório, para que todos possamos usá-los.

Então eu digo: o .settingsdiretório entra no controle de origem para configurações de inicialização (exceto * .prefs)

.classpath fica fora

.project entra

Zak Patterson
fonte
É esse o caso mesmo ao usar ambientes de execução para o JRE / JVM?
Mr_and_Mrs_D
5

Eu verificaria esses arquivos para facilitar ao máximo o início de novos usuários. Na melhor das hipóteses, o usuário deve verificar o projeto e ser capaz de executá-lo sem conhecimento extra. Para esses arquivos, as regras são as mesmas que para outros arquivos no projeto: manuseie-os com cuidado. Você não deve colocar caminhos absolutos no código-fonte, nem nos arquivos de configuração.

Se os arquivos forem verificados de forma que o projeto seja executado do zero, não haverá muitas forças para alterá-los.

Arne Deutsch
fonte
5

Eu recomendaria que você verifique os arquivos no subversion SE eles não contiverem caminhos absolutos e outros dados que os vinculariam diretamente ao ambiente de um único desenvolvedor.

Se os arquivos contiverem caminhos absolutos e semelhantes, um README seria uma escolha melhor.

Vkraemer
fonte
2

Sim, definitivamente verifique-os, mas certifique-se de documentar quaisquer dependências de caminho e evitar caminhos absolutos, se possível.

Se você não fizer o check-in, qualquer pessoa que fizer check-out do projeto precisará recriar todas essas configurações, o que é irritante e potencialmente sujeito a erros.

Algumas configurações complexas podem ser melhor tratadas por um script para gerar esses arquivos, mas geralmente é melhor apenas registrá-los.

Christopher Barber
fonte