java命令javac命令jar命令使用

java命令、javac命令、jar命令使用

 

java命令基础知识

#创建项目目录
mkdir -p myproject/src
mkdir -p myproject/target

cd myproject

#创建项目文件
vim src/App.java
public class App{
        public static void main(String[] args){
                System.out.println("hello app");
        }
}

#编译java文件
## 不支持递归
javac -d ./target ./src/*.java
## 支持递归(把文件列表生成到一个文件里)
uninx  find -name "*.java" > sources.txt
win32  dir /s /B *.java > sources.txt

javac -d ./target @sources.txt

#执行程序
java -cp ./target App
或 cd target && java App

#生成可执行的jar包
cd target
jar -cvfe app.jar App .
java -jar app.jar  (当使用-jar参数时 -cp失效,如果需要指定classpath 请在manifest文件中指定)


#引用第三方包时编译
classpath多个时windows使用分号; linux使用冒号
javac -cp ./lib/mylib.jar -d target @sources.txt

#引用第三方包时执行
java -cp ./lib/mylib.jar:./target App

#引用第三方包时编译成可执行文件

1.编写manifest文件(注意文件最后加上一个换行)
vim manifest.mf

Manifest-Version: 1.0
Main-Class: App
Class-Path: lib/mylib.jar lib/mylib2.jar  (每个单独的jar用空格隔开就可以了,如果换行每行第一个字符是空格)
                 (注意文件末尾必须一个空行)

2.编译jar包
cd target 
jar -cvfm app.jar ../manifest.mf .

3.启动可执行的jar
把引了lib文件夹与app.jar放在同一目录
java -jar app.jar 

关于lib包的可以放的位置
1.与app.jar同目录 
2.放到%JRE_HOME%/lib/ext下面,这个目录下的jar包会在Bootstrap Classloader工作完后由Extension Classloader来加载。
3.通过运行时参数实现
win32  java -Xbootclasspath/a: mylib.jar;mylib2.jar;  -jar app.jar  (使用分号)
unix   java -Xbootclasspath/a: mylib.jar:mylib2.jar:  -jar app.jar  (使用冒号)

4.能否把lib包和可执行的jar打包在一起?
可以的,添加一个特殊的类加载器,该类加载器将在执行主类之前为您透明地加载那些JAR
如:使用eclipse导出的可执行jar包,它是借助做到的JarRsrcLoade
   Springboot项目的org.springframework.boot.loader.JarLauncher

 

posted @ 2023-02-03 18:05  liuxm-刘小明  阅读(222)  评论(0编辑  收藏  举报