Qual é a diferença entre Class Path e Build Path

86

Estou confuso com esses dois termos.

Além disso, o que devo fazer para criar um arquivo na pasta src de um projeto Spring MVC? Quando eu crio usando um objeto File, ele cria o arquivo dentro de C: \ SpringSourceTool ... Acho que este é o ClassPath certo?

Como posso obter a applicationcontextpasta ou raiz do aplicativo?

mehmet6parmak
fonte

Respostas:

100

O caminho de construção é usado para construir seu aplicativo. Ele contém todos os seus arquivos de origem e todas as bibliotecas Java necessárias para compilar o aplicativo.

O classpath é usado para executar o aplicativo. Isso inclui todas as classes e bibliotecas java que são necessárias para executar o aplicativo java. Um Classpath é obrigatório, o caminho padrão .é usado se a máquina virtual java não puder encontrar um caminho definido pelo usuário. ( CLASSPATHvariável de ambiente, -cpsinalizador ou Class-Path:atributo em um manifesto jar)

Andreas Dolk
fonte
Mas javac usa um argumento de caminho de classe. Pode-se dizer que este parâmetro "sobrecarregado" para especificar o caminho de construção?
aioobe de
4
Não. O argumento classpath é uma dica para o compilador do que ele deve esperar estar disponível / fornecido em tempo de execução, uma vez que você não constrói todas as classes que usa (por exemplo, JFC, bibliotecas, ...). O buildpath contém dependências de origem e / ou origem / compiladas e onde procurá-las.
Johannes Wachter de
Ao desenvolver um plugin, adicionei todas as bibliotecas necessárias ao caminho de classe, mas não consegui importar nada. O Eclipse não os viu até eu adicioná-los para construir o caminho.
Bax de
51

O classpath é a maneira convencional de informar ao compilador Java (padrão) e ao tempo de execução Java onde encontrar as classes compiladas. Normalmente é uma sequência de nomes de arquivo JAR e nomes de diretório. O classpath usado pelo compilador e pelo sistema de tempo de execução não precisa ser o mesmo, mas normalmente deve ser , especialmente para um projeto pequeno.

Buildpath não é a terminologia Java padrão. É o termo que designa a maneira mais rica com que um IDE típico especifica o relacionamento entre os "projetos" que compõem um aplicativo. O IDE usa isso para descobrir o classpath e sourcepath para compilar o código Java e o classpath para executá-lo. O IDE também usa o caminho de construção para descobrir como empacotar seu código e suas dependências como (por exemplo) um arquivo WAR.

Por exemplo, um caminho de construção do Eclipse para um projeto inclui os outros projetos dos quais ele depende e lista quaisquer JARs de biblioteca adicionais que o projeto contém / depende. Ele também lista os pacotes no projeto atual dos quais os projetos posteriores podem depender.

(Se você estiver usando Maven para o seu projeto, o mecanismo de buildpath do IDE é secundário às dependências declaradas nos arquivos POM. Por exemplo, usando o Eclipse com o m2eclipse, o buildpath é sintetizado a partir dos arquivos POM.)

Stephen C
fonte
27

O caminho da classe é usado em tempo de execução para carregar classes e recursos compilados.

O caminho de construção é usado em tempo de compilação para encontrar as dependências necessárias para construir seu projeto.

KeatsPeeks
fonte
Você poderia dizer que o caminho de classe é usado para localizar .classarquivos (e outros recursos compilados), enquanto o caminho de construção é usado para localizar arquivos de origem que precisam ser compilados?
Adam
1
@Adam Não acho isso totalmente verdade. O caminho de construção precisa de arquivos .class para compilar arquivos de origem às vezes. Portanto, o caminho de construção também usa o caminho da classe nos bastidores. Se você levar algum tempo para compilar e executar um projeto java usando a CLI java, poderá ver isso. O javac e o comando java têm uma opção de classpath porque ambos podem precisar dela.
intrepistar_88
4

Cada projeto Java possui seu próprio caminho de construção que especifica todas as dependências necessárias para compilar o projeto. Essas dependências podem vir de outros projetos Java na área de trabalho, de arquivos Java .jar ou de pastas contendo arquivos .class.

No ambiente CLASSPATH, você precisa especificar apenas arquivos .class (ou seja, jar, arquivos zip - dentro de jar, arquivos zip você encontrará apenas classes java), ou seja, você está ajudando Java Virtual Machine (JVM) a encontrar arquivos de classe Java

Além disso, o que devo fazer para criar um arquivo na pasta src de um projeto Spring MVC? Quando eu crio usando um objeto File, ele cria o arquivo dentro de C: \ SpringSourceTool ...

É aqui que a JVM foi iniciada, se você deseja criar o arquivo em outro local, use o caminho relativo a partir daqui.

Veja isto e isto para mais informações.

pavanlimo
fonte
Você nem mesmo mencionou o caminho de construção em sua resposta.
aioobe de
4

Eu gostaria de acrescentar à resposta de Andreas_D para explicar que o caminho de construção é exigido pelo IDE / compilador para localizar pacotes externos e classes usadas por seu código. Às vezes nos referimos a isso como 'dependências' .

NB: Esses pacotes externos podem ser empacotados dentro de um arquivo .jar compactado ou, na verdade, podem haver vários arquivos jar empacotados dentro de uma 'biblioteca' . Uma biblioteca ou grupo de bibliotecas freqüentemente constitui uma 'estrutura' .

Se seu código requer código escrito por outros, você pode importá- los para sua classe usando o importcomando. No entanto, esse comando por si só é insuficiente, pois o compilador ou IDE precisa saber onde essas classes estão localizadas. Você especifica isso no caminho de construção .

Por classpathoutro lado, informa à JVM que está executando seu aplicativo onde encontrar quaisquer dependências durante a execução real de seu código.

Também a observar: Classpath é para uso pela JVM.

Buildpath é para ser usado pelo IDE / compilador e é um meio de construir o classpath de seu ambiente de desenvolvimento. Ao configurar seu buildpath por meio de seu IDE, você também está configurando um arquivo oculto em seu projeto chamado .classpath. Isso é usado para fornecer o caminho de classe para JVM na implementação.

IqbalHamid
fonte
1

Classpath ( da Wikipedia ):

Semelhante ao comportamento de carregamento dinâmico clássico, ao executar programas Java, a Java Virtual Machine encontra e carrega classes lentamente (carrega o bytecode de uma classe apenas quando a classe é usada pela primeira vez). O classpath informa ao Java onde procurar no sistema de arquivos os arquivos que definem essas classes.

A máquina virtual procura e carrega classes nesta ordem:

classes bootstrap: as classes que são fundamentais para a plataforma Java (compreendendo as classes públicas da Java Class Library e as classes privadas que são necessárias para que esta biblioteca seja funcional).

classes de extensão: pacotes que estão no diretório de extensão do JRE ou JDK,

pacotes e bibliotecas jre / lib / ext / definidos pelo usuário

Por padrão, apenas os pacotes da API padrão JDK e pacotes de extensão são acessíveis sem a necessidade de definir onde encontrá-los. O caminho para todos os pacotes e bibliotecas definidos pelo usuário deve ser definido na linha de comando (ou no Manifesto associado ao arquivo Jar contendo as classes).

Simplificando - enquanto seu programa está em execução, a JVM carrega classes apenas conforme necessário. Quando uma classe é necessária, a JVM dependerá do classpath para saber de onde carregar o bytecode (ou seja: .classarquivos).

O caminho de construção , por outro lado, é normalmente usado por um IDE, como o Eclipse, para saber onde procurar bibliotecas adicionais necessárias para compilar o código-fonte de um projeto. O caminho de construção não é usado durante o tempo de execução.

Tom O.
fonte