Прежде всего, обратите внимание, что если вы просто сделаете
javac org/project/SomeClass.java
, файл класса окажется прямо рядом с файлом .java, что затрудняет включение в jar-файл только .class-файлов.Я предлагаю вам использовать опцию -d
, чтобы указать каталог назначения:
javac -d bin org/project/SomeClass.java
Посмотрите на следующую сессию bash для деталей, чтобы она заработала:
Список источникаdirectory:
user@host:/working_dir/src$ ls -R
.:
org
./org:
projectname
./org/projectname:
SomeClass.java
Файл SomeClass.java:
user@host:/working_dir/src$ cat org/projectname/SomeClass.java
package org.project;
public class SomeClass {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Скомпилируйте его (с целевым каталогом ../bin)
user@host:/working_dir/src$ javac org/projectname/SomeClass.java -d ../bin
Выведите список иУбедитесь, что вы правильно выбрали каталоги:
user@host:/working_dir/src$ cd ../bin/
user@host:/working_dir/bin$ ls -R
.:
org
./org:
project
./org/project:
SomeClass.class
Создайте файл jar:
user@host:/working_dir/bin$ jar cf myjar.jar org
Убедитесь, что вы правильно выбрали каталоги и случайно не включили каталог "bin":
user@host:/working_dir/bin$ jar tf myjar.jar
META-INF/
META-INF/MANIFEST.MF
org/
org/project/
org/project/SomeClass.class
Запустите основной метод:
user@host:/working_dir/bin$ java -cp myjar.jar org.project.SomeClass
Hello World
user@host:/working_dir/bin$