一、java命令
javac:将.java文件编译成.class文件
cp - 指定class搜索路径
d - 指定class文件生成目录
java: 执行.class或.jar文件
cp指定class搜索路径
示例:java test1.app #表示执行./test1/app.class文件main函数
jar:打包生成.jar文件
v- 可视化输出
c - 创建一个新的Jar文件
示例:jar cvf myapp.jar *.class
t - 列出Jar文件中所有的文件
示例:jar tvf myapp.jar
x - 从Jar文件中提取文件
示例:jar xvf myapp.jar
u - 更新现有的Jar文件
示例:jar uvf myapp.jar *.class
f - 指定Jar文件名
示例:jar cf myapp.jar *.class
m - 添加清单文件
示例:jar cvmf MANIFEST.MF myapp.jar *.class
e - 指定主类
示例:jar cfe myapp.jar MyApp *.class
C - 指定工作目录,相当于在执行jar目录前先cd到指定目录
示例:jar cf myapp.jar -C classes .
二、Java HelloWorld
1.单个java文件
(1)创建文件src/test1/app.java如下:
package test1;
public class app
{
public static void main( String[] args ) {
System.out.println( "Hello World!" );
}
}
(2)编译生成.class文件
#编译app.java文件,生成的class文件跟java同目录
javac ./test1/app.java
(3)执行.class文件
#test1.app为主类名(表示执行./test1/app.class文件main函数)
java test1.app
执行结果如下:
2.单个包多java文件
(1)创建文件src/test2/func.java、src/test2/app.java(都包含在test2包中)如下:
#func.java文件
package test2;
public class func
{
public void test() {
System.out.println( "func.test()!" );
}
}
#app.java文件
package test2;
public class app
{
public static void main( String[] args ) {
func a = new func();
a.test();
System.out.println( "Hello World!" );
}
}
(2)编译java文件生成class文件
javac ./test2/app.java ./test2/func.java
(3)执行class文件
#test2.app为主类名
java test2.app
执行结果如下:
3.多个包
多个包的特点是每个包由不同的团队开发,包之间只能通过class引用。
(1)创建文件src/pub/func.java(公共包pub):
package pub;
public class func
{
public void test() {
System.out.println( "pub.func.test()!" );
}
}
(2)编译pub包:
javac ./pub/func.java
(3)创建文件app.java(包test3),如下:
package test3;
import pub.func;
public class app
{
public static void main( String[] args ) {
func a = new func();
a.test();
System.out.println( "Hello World!" );
}
}
(4)编译app.java并执行生成的class文件
#编译app.java
javac ./test3/app.java
#执行class,test3.app为主类
java test3.app
执行结果如下:
三、jar包
1.生成jar包
(1)创建文件src/test1/app.java如下:
package test4;
public class app
{
public static void main( String[] args ) {
System.out.println( "Hello World!" );
}
}
(2)编译生成.class文件
#编译app.java文件,指定class文件生成到target目录下
javac ./test4/app.java -d ./target
(3)打包生成jar文件
#将./target目录下的所有文件打包成./test4/app.jar文件
#-C相当于先cd到target目录,./参数是相对于target的目录
jar cvf ./test4/app.jar -C ./target ./
(4)执行jar文件
#-cp指定class目录或jar包路径,test4.app为主类
java -cp ./test4/app.jar test4.app
执行结果如下:
打jar包时指定主类执行结果如下:
#参数e指定主类为test4.app
jar cvfe ./test4/app.jar test4.app -C ./target ./
#运行时无需指定主类
java -jar ./test4/app.jar
2.引用jar包
(1)创建文件src/pub/func2.java(公共包pub):
package pub;
public class func2
{
public void test() {
System.out.println( "pub.func2.test()!" );
}
}
(2)编译pub并生成jar包:
#编译java文件,class生成到target目录
javac ./pub/func2.java -d ./target
#打jar包,只打pub目录的文件
jar cvf ./pub/func2.jar -C ./target ./pub
(3)创建文件src/test5/app.java:
package test5;
import pub.func2;
public class app
{
public static void main( String[] args ) {
func2 a = new func2();
a.test();
System.out.println( "Hello World!" );
}
}
(4)编译app.java,并执行生成的class文件
#编译
javac -cp ./pub/func2.jar ./test5/app.java
#执行,执行时默认搜索路径为当前目录,若通过cp指定目录也需要包含当前目录
java -cp ./pub/func2.jar;./ test5.app
执行结果如下:
三、IntelliJ IDEA+Maven HelloWorld
1.IDEA创建项目File->New->Project,如下:
2.配置Project参数如下:
3.编译并打jar包,如下图:(每次package前需要clean),package后会生成HelloWorld-1.0-SNAPSHOT.jar文件(D:\HelloWorld\target目录下)
4.执行生成的jar包
#cd到jar包所在目录
cd d:\HelloWorld\target
#执行jar包,指定主类为org.example.App
java -cp HelloWorld-1.0-SNAPSHOT.jar org.example.App
执行结果如下:
5.若希望在打jar包时指定主类,将如下配置增加到pom.xml文件中:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.example.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
6.重新package之后生成新的jar文件,直接执行jar文件:
#cd到jar目录
cd d:\HelloWorld\target
#直接执行jar,无需指定主类,注意参数是-jar
java -jar HelloWorld-1.0-SNAPSHOT.jar
执行结果如下:
查看jar包中 MANIFEST.MF文件多了一行Main-Class,如下:
四、IntelliJ IDEA+Maven+springboot HelloWorld