O que há em um arquivo .classpath / .project do Eclipse?

143

Recentemente, tivemos um problema com um projeto Eclipse para um dos membros da nossa equipe. O Tomcat não estava implementando JARs do aplicativo.

Eventualmente, percebemos que o .classpatharquivo Eclipse não era o mesmo dos membros da equipe em que o projeto estava OK. Substituímos o .classpatharquivo por um de um projeto que estava OK e a implantação do Tomcat foi concluída.

Apenas por curiosidade e saber o que procurar no futuro se algo estiver errado, o que há dentro dos arquivos .classpathe .project. O que posso adicionar lá, o que tudo isso significa?

Eclipse total
fonte
O arquivo .classpath é específico para Java? Essa questão parece ser independente da linguagem, mas a partir dessa resposta parece que ela é relevante apenas para Java.
Casey Kuball 13/09

Respostas:

144

O Eclipse é um ambiente de tempo de execução para plug-ins. Praticamente tudo o que você vê no Eclipse é o resultado de plug-ins instalados no Eclipse, em vez do próprio Eclipse.

O .projectarquivo é mantido pela plataforma principal do Eclipse e seu objetivo é descrever o projeto a partir de uma visualização genérica do Eclipse, independente de plug-in. Qual o nome do projeto? a que outros projetos no espaço de trabalho ele se refere? Quais são os construtores que são usados ​​para construir o projeto? (lembre-se, o conceito de "build" não se refere especificamente a projetos Java, mas também a outros tipos de projetos)

O .classpatharquivo é mantido pelo recurso JDT do Eclipse ( feature = set of plugins). O JDT mantém vários desses arquivos "meta" no projeto (consulte o .settingsdiretório dentro do projeto); o .classpatharquivo é apenas um deles. Especificamente, o .classpatharquivo contém informações que o recurso JDT precisa para compilar corretamente o projeto: as pastas de origem do projeto (ou seja, o que compilar); as pastas de saída (onde a compilar a ); e entradas do caminho de classe (como outros projetos na área de trabalho, arquivos JAR arbitrários no sistema de arquivos e assim por diante).

Copiar cegamente esses arquivos de uma máquina para outra pode ser arriscado. Por exemplo, se arquivos JAR arbitrários forem colocados no caminho de classe (ou seja, arquivos JAR localizados fora da área de trabalho e referidos pela nomeação de caminho absoluta), o .classpatharquivo será renderizado como não portátil e deverá ser modificado para ser portátil. Existem certas práticas recomendadas que podem ser seguidas para garantir a .classpathportabilidade do arquivo.

Isaac
fonte
58
Como uma pessoa de fora de tudo isso, tudo isso se traduz em "O Eclipse de alguma forma consegue transformar tudo em gerenciamento de espaço de trabalho do projeto em uma arte negra inescrutável que é muito difícil para alguém entender".
Warren P
1
@Isaac - Por curiosidade, caso eu gerencie meu projeto com gite Maven, ou seja, possuo (por simplicidade) a pasta "raiz" do repositório (projeto) com uma única srcpasta (contém um .javaarquivo simples "olá mundo" ) e o do projeto pox.xmlarquivo - então, se eu entendi bem, não há necessidade (ou talvez mesmo necessariamente nenhuma necessidade) para manter o: .project, .classpathe .settings/arquivos / pastas, bem como no gitrepositório (ie-adicioná-los ao .gitignorearquivo por exemplo)?
Guy Avraham
1
@GuyAvraham, que depende de como você trabalha com o Eclipse e, especificamente - como você inicializa um espaço de trabalho. Você inicia o Eclipse em um novo espaço de trabalho e usa "importar projetos existentes do Maven"? se assim for, então você está certo - nenhum desses arquivos é realmente necessário, pois m2eclipsecuida disso para você (ou, pelo menos, é o que deveria estar fazendo).
Isaac
1
@buncis .projectnão deve estar em .gitignore. Em relação .classpath- se você usa m2eclipsee seu espaço de trabalho é configurado para atualizar projetos Maven na inicialização, então você deve estar OK com a adição .classpathde .gitignoremas eu não testei isso sozinho.
Isaac
1
@buncis apenas corrigindo esse último comentário. Aparentemente, o M2E faz um bom trabalho atualmente na configuração de projetos. Recentemente, trabalhei em uma base de código de aproximadamente 150 projetos Java de todos os tipos. Eu removi .projecte .classpathde todos eles e adicionei a .gitignore. Tudo funciona bem e não preciso atualizar infinitamente esses arquivos no Git com muita frequência.
Isaac
37

.project

Quando um projeto é criado na área de trabalho, é gerado automaticamente um arquivo de descrição do projeto que descreve o projeto. O único objetivo deste arquivo é tornar a descrição do projeto automaticamente, para que um projeto compactado ou liberado em um servidor possa ser recriado corretamente em outro espaço de trabalho.

.classpath

Caminho de classe especifica quais arquivos de origem e recursos Java em um projeto são considerados pelo construtor Java e especifica como localizar tipos fora do projeto. O construtor Java compila os arquivos de origem Java na pasta de saída e também copia os recursos nela.

Rupesh Yadav
fonte
11

A referência completa não está disponível para os arquivos mencionados, pois eles são extensíveis por vários plug-ins.

Basicamente, os arquivos .project armazenam configurações do projeto, como configurações do construtor e da natureza do projeto, enquanto os arquivos .classpath definem o caminho da classe a ser usado durante a execução. Os arquivos do caminho de classe contêm entradas src e target que correspondem às pastas no projeto; as entradas con são usadas para descrever algum tipo de entradas "virtuais", como as bibliotecas da JVM ou no caso de dependências de plug-ins do eclipse (as dependências normais do projeto Java são exibidas de maneira diferente, usando uma entrada src especial).

Zoltán Ujhelyi
fonte
3

Esta documentação do eclipse possui detalhes sobre as marcações no .projectarquivo: O arquivo de descrição do projeto

Ele descreve o .projectarquivo como:

Quando um projeto é criado na área de trabalho, é gerado automaticamente um arquivo de descrição do projeto que descreve o projeto. O objetivo deste arquivo é tornar a descrição do projeto automaticamente, para que um projeto compactado ou liberado em um servidor possa ser recriado corretamente em outro espaço de trabalho. Este arquivo é sempre chamado ".project"

senpai
fonte