Sim, para executar uma jarra, ela precisa existir.
Ao criá-lo, você precisa combinar a estrutura de diretórios com a estrutura do pacote.
Por exemplo, seus diretórios podem ser:
/home/ellen/proj/java/foo/example/src/example/Foo.java
/home/ellen/proj/java/foo/example/src/example/util/MyList.java
para fontes e para arquivos de classe:
/home/ellen/proj/java/foo/example/classes/example/Foo.class
/home/ellen/proj/java/foo/example/classes/example/util/MyList.class
(muitas vezes você encontra classes em um ../bin/ .. em vez de ../classes/ .. pasta nomeada ou arquivos de origem e classe são misturados nos mesmos diretórios)
correspondente a uma estrutura de pacotes:
package example
package example.util
você deve mover para o diretório base da hierarquia:
cd /home/ellen/proj/java/foo/example/classes
ou defina-o com o parâmetro -C jar -C /home/ellen/proj/java/foo/example/classes ...
ou a partir do início jar -C proj/java/foo/example/classes ...
como caminho relativo.
Você cria o arquivo jar, por exemplo, com:
jar -cf example.jar *.class
e inspecione com:
jar -tf example.jar
Observe que há um arquivo de manifesto, gerado e útil automaticamente, como um modelo, no qual você pode adicionar as informações da sua classe principal, se tiver, mas que é bastante rigorosa sobre qual é a sintaxe (superior / minúsculas, quebras de linha).
Manifest-Version: 1.0
Created-By: 9-internal (Oracle Corporation)
Main-Class: example.Main
Essa entrada de classe principal deve ser adicionada, se você quiser executá-la sem especificar a classe principal:
java -jar example.jar
ou então você tem que usar:
java -cp example.jar example.Main
Em essência, um arquivo jar é um arquivo zip e pode ser trabalhado com essas ferramentas.
Uma separação limpa de src / e bin / files é útil, quando você tem mais de um punhado de classes e provavelmente uma profunda estrutura de pacotes.
jar -cf example.jar -C classes .
irá, então, começar nas classes de diretório / incluir tudo o que é normalmente o que você deseja. (exemplo / classe, exemplo / util / .class, exemplo / net / * classe ...)
jar --help
informa sobre a sintaxe.