Giriş
Söz dizimi şöyle.
java.library.path Ortam Değişkeni
Bu ortam değişkeni eğer java kodundan DLL kullanılıyorsa, DLL dosyalarının bulunduğu dizini gösterir. Linux'ta DLL yerine Shared Object (.so) dosyaları var
Söz dizimi şöyle.
Bu komutu çalıştırmak için JAVA_HOME Ortam Değişkeni'nin tanımlı olması gerekir.java [options] classname [args]
java.library.path Ortam Değişkeni
Bu ortam değişkeni eğer java kodundan DLL kullanılıyorsa, DLL dosyalarının bulunduğu dizini gösterir. Linux'ta DLL yerine Shared Object (.so) dosyaları var
Linux Yöntemleri
Yöntemler şöyle
1. Call System.load to load the shared library from an explicitly specified absolute path.
Yapmayın
2. Copy the shared library to one of the paths already listed in java.library.path
Açıklaması şöyle. Yapmayın
The java.library.path is initialized from the LD_LIBRARY_PATH environment variable.
3. Modify the LD_LIBRARY_PATH environment variable to include the path where the shared library is located.
Bence en makul çözüm bu
4. Specify the java.library.path on the command line by using the -D option.
Bence en makul ikinci çözüm bujava komutu Module Seçenekleri yazısına taşıdım
-add-modules seçeneği
java komutu Module Seçenekleri yazısına taşıdım
java komutu Module Seçenekleri yazısına taşıdım
-classpath (ya da -cp ) seçeneği
Açıklaması şöyle.
Şöyle yaparız.
Şöyle yaparız.
Bu seçeneği kullanmak yerine CLASSPATH ortam değişkenini kullanmak daha iyi.
Açıklaması şöyle.
-ea seçeneği
Açıklaması şöyle enables assertions anlamına gelir.
Parametre Geçme Seçenekleri yazısına taşıdım
Dynamic Agent Loading yeteneği Java 21 ile deprecate ediliyor.
Açıklaması şöyle.
$ java -help
…
-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
A : separated list of directories, JAR archives,
and ZIP archives to search for class files.
ÖrnekŞöyle yaparız.
bash$ java -classpath path/to/jars/directory MyMainClass
ÖrnekŞöyle yaparız.
"%JAVA_HOME%\jre\bin\java.exe" -classpath bind MyMainClass
Örnek - Birden fazla dizin
Windows'ta tek tırnak ile şöyle yaparız. Dizinler ; karakteri ile ayrılırjava -verbose -classpath '../lib;.' bt_sim <args>
Linux'ta dizinler : karakteri ile ayrılır.Bu seçeneği kullanmak yerine CLASSPATH ortam değişkenini kullanmak daha iyi.
bash$ export CLASSPATH="path/to/jars/directory1:path/tojars/directory2"
bash$ javac MyMainClass.java
Örnek - wildcardAçıklaması şöyle.
Class path entries can contain the basename wildcard character *, which is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR. For example, the class path entry foo/* specifies all JAR files in the directory named foo. A classpath entry consisting simply of * expands to a list of all the jar files in the current directory.Bir dizindeki tüm jar'ları dahil etmek için şöyle yaparız.
java -cp /home/acelya/*: MyMainClass
-de seçeneği
Açıklaması şöyle. disable assertions anlamına gelir.-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
disable assertions with specified granularity
Assertleri kapatır.-ea seçeneği
Açıklaması şöyle enables assertions anlamına gelir.
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions with specified granularity
Kod içindeki assertlerin çalışması için gerekir. Uzun hali -enableassertions seçeneğidir. Kod derleyici tarafından şu hale getirilir.if (!cond)
throw new AssertionError();
Eğer assert için mesaj kullanılırsaassert d != null : "d is null";
Kod derleyici tarafından şu hale getirilir.if ($assertionsEnabled && !(Expression1))
throw new AssertionError(Expression2);
-D seçeneğiParametre Geçme Seçenekleri yazısına taşıdım
-jar seçeneği - Executable Jar çalıştırmak
Açıklaması şöyle.Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
jar dosyasında Manifest varsa şöyle ve bu dosyada Main-Class satırı varsa şöyle yaparız.java -jar path/to/jar/file
Eğer Manifest dosyası yoksa başlangıç sınıfını vermek gerekir.java -cp path/to/jar/file MainClass
Elimizde şöyle bir dizin yapısı olsunjar_root/
├── executable.jar
├── folder1/
│ └── required_file1.txt
│
├── folder2/
│ └── required_file2.txt
│
├── other_folder/
│ └── ...
└── other_file.txt
executable.jar dosyasını çalıştırınca folder1/required_file1.txt dosyasını okumak istiyor olsun. Bu durumda harici bir dosya okuduğumuz için jar dosyası şöyle çalıştırılır. Önce jar'ın olduğu dizine gideriz. Sonra -jar seçeneği ile executable jar'ı çalıştırırız.cd /path/to/jar_root/
java -jar executable.jar <options>
jar içindeki java kodu dosyayı muhtemelen şöyle açıyordur.File file = new File("folder1", "required_file1")
-javaagent seçeneğiDynamic Agent Loading yeteneği Java 21 ile deprecate ediliyor.
Örnek
Şöyle yaparız.
Şöyle yaparız.
java -javaagent:agent.jar -jar myApp.jar
-help seçeneğiŞöyle yaparız.
$ java -help
Usage: java [options] <mainclass> [args...]
(to execute a class)
or java [options] -jar <jarfile> [args...]
(to execute a jar file)
or java [options] -m <module>[/<mainclass>] [args...]
java [options] --module <module>[/<mainclass>] [args...]
(to execute the main class in a module)
or java [options] <sourcefile> [args]
(to execute a single source-file program)
--illegal-access seçeneğiAçıklaması şöyle
Since Java 16, the --illegal-access flag is set to deny by default, resulting in some calls (mainly related to reflection) being treated as illegal and throwing a beautiful java.lang.reflect.InaccessibleObjectException. In our case, we found out that the libraries Kryo (through Chill) and Aeron use low-level JDK APIs and now trigger illegal access exceptions.
We immediately spotted this issue with our test battery and fixed it by simply allowing access to these internal APIs with a set of extra parameters passed at runtime — --add-opens {package}=ALL-UNNAMED. After a session of trial and error, we came up with the correct list of packages to open. To go further on this topic we recommend looking into JEP 396 and JEP 403.
-m seçeneği
Çalıştırılacak ana sınıfı beliritr.
--module modulename[/mainclass] veya -m module[/mainclass] şeklindedir.
Örnek
Şöyle yaparız.
-p ile aynıdır. Açıklaması şöyle. Yani --module-path modulepath veya -p modulepath şeklindedir.
Şöyle yaparız.
Moduler jar dosyasındaki modülleri listelemek için şöyle yaparız.
Çalıştırılacak ana sınıfı beliritr.
--module modulename[/mainclass] veya -m module[/mainclass] şeklindedir.
Örnek
Şöyle yaparız.
java --module-path mods -m com.test/com.test.HelloWorld
^ ^ ^
module directory module name main class
--module-path veya -p seçeneği-p ile aynıdır. Açıklaması şöyle. Yani --module-path modulepath veya -p modulepath şeklindedir.
ÖrnekSearches for directories from a semicolon-separated (;) list of directories. Each directory is a directory of modules.
Şöyle yaparız.
java --module-path mymods -m com.test/com.test.HelloWorld
ÖrnekModuler jar dosyasındaki modülleri listelemek için şöyle yaparız.
java -p yourModular.jar --list-modules
-noverify seçeneği
Açıklaması şöyle. Bytecode'un değişmediğini değil, zarar vermeyeceğini doğrulamaya çalışır.
When a class loader presents the bytecodes of a newly loaded Java platform class to the virtual machine, these bytecodes are first inspected by a verifier. The verifier checks that the instructions cannot perform actions that are obviously damaging. All classes except for system classes are verified. You can, however, deactivate verification with the undocumented -noverify option.
-server seçeneği
Açıklaması şöyle
java komutu normalde derlenmiş .class dosyalarını çalıştırır. Java 11 ile tek dosyadan oluşan (dosya içinde birden fazla class kodu olabilir) kaynak kodu çalıştırmak için de kullanılabiliyor.
-X seçeneği
-X Seçenekleri yazısına taşıdım.
-XX seçenekleri
XX Seçenekleri yazısına taşıdım.
-verbose seçeneği
Açıklaması şöyle
-server to select the "server" VM
The default VM is server.
--source seçeneğijava komutu normalde derlenmiş .class dosyalarını çalıştırır. Java 11 ile tek dosyadan oluşan (dosya içinde birden fazla class kodu olabilir) kaynak kodu çalıştırmak için de kullanılabiliyor.
-X seçeneği
-X Seçenekleri yazısına taşıdım.
-XX seçenekleri
XX Seçenekleri yazısına taşıdım.
-verbose seçeneği
Açıklaması şöyle
-verbose:[class|gc|jni]
enable verbose output
Daha detaylı çıktı üretir. Şöyle yaparız.java -verbose ...
-version seçeneği-version seçeneği yazısına taşıdım.