hualinux java 1.7:使用idea发布java项目(了解)

 目录

一、 jar和war包介绍的区别

二、打包成jar,并在win和centos上运行

2.1 Project Structure简述

2.1.1  projects、Modules

2.1.2 Libraries

2.1.3 Facets

2.1.4 Artifacts

2.2 配置Artifacts

2.3 编译生成jar可执行文件

三、运行jar

扫描二维码关注公众号,回复: 11303637 查看本文章

3.1 在本地windows上运行

3.2 在centos服务器上运行

3.2.1 在centos的mysql数据库中生成数据

3.2.2 修改mysql连接IP 用户名 密码

3.2.3 重新编译jar

3.2.4 centos8上执行jar

附录一、关于jar包


我们在前一章《hualinux java 1.6:idea连接mysql8进行数据查询》讲了java连接数据并进行查询,现在本章将讲如何用idea发布java项目,生成jar可执行程序。就以上一章的项目为例子,用idea发布。

一、 jar和war包介绍的区别

java项目是打包成jar,java web项目是打包成war

JavaSE程序可以打包成Jar(J其实可以理解为Java),而JavaWeb程序可以打包成war(w其实可以理解为Web)。然后把war发布到Tomcatwebapps目录下,Tomcat会在启动时自动解压war包。

JARJava ArchiveJava 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。

JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR

 

如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,我们可以将Web应用程序打包成Web 归档(WAR)文件,这个过程和把Java类文件打包成JAR文件的过程类似。利用WAR文件,可以把Servlet类文件和相关的资源集中在一起进行发布。在这个过程中,Web应用程序就不是按照目录层次结构来进行部署了,而是把WAR文件作为部署单元来使用。

一个WAR文件就是一个Web应用程序,建立WAR文件,就是把整个Web应用程序(不包括Web应用程序层次结构的根目录)压缩起来,指定一个.war扩展名。下面我们将第2章的Web应用程序打包成WAR文件,然后发布

要注意的是,虽然WAR文件和JAR文件的文件格式是一样的,并且都是使用jar命令来创建,但就其应用来说,WAR文件和JAR文件是有根本区别的。JAR文件的目的是把类和相关的资源封装到压缩的归档文件中,而对于WAR文件来说,一个WAR文件代表了一个Web应用程序,它可以包含 ServletHTML页面、Java类、图像文件,以及组成Web应用程序的其他资源,而不仅仅是类的归档文件。

我们什么时候应该使用WAR文件呢?在开发阶段不适合使用WAR文件,因为在开发阶段,经常需要添加或删除Web应用程序的内容,更新 Servlet类文件,而每一次改动后,重新建立WAR文件将是一件浪费时间的事情。在产品发布阶段,使用WAR文件是比较合适的,因为在这个时候,几乎不需要再做什么改动了。

在开发阶段,我们通常将Servlet源文件放到Web应用程序目录的src子目录下,以便和Web资源文件区分。在建立WAR文件时,只需要将src目录从Web应用程序目录中移走,就可以打包了

二、打包成jar,并在win和centos上运行

从上面知道java应用程序打成的是jar包,如果要在centos服务器上运行jar包,只需要jre就行了,当然jdk更是可以,jdk包括了jre功能,在jdk11(包括11)之后,jre就没集成进jdk中了。

为了方便我直接上传到安装在LNMT的环境中用java运行运行这个jar包,LNMT的搭建详见我写的《hualinux2.7 环境搭建:centos8 LNMT(nginx+mysql+tomcat)

2.1 Project Structure简述

打开菜单File -> Project Structure,这里要顺带说一下:

2.1.1  projectsModules

IntelliJ IDEA 没有类似 Eclipse 工作空间(workspace)的概念的。

在 IntelliJ IDEA 中 Project 是最顶级的级别

次级别是 Module

(值得注意的是上面橙色目录,表示的是Excluded,排除,是什么意思呢,就是如果项目打包,发布的话是不包括它

 

一个 Project 可以有多个 Module。目前主流的大型项目结构都是类似这种多 Module 结构,这类项目一般是这样划分的,比如:core Module、web Module、plugin Module、solr Module 等等,模块之间彼此可以相互依赖。通过这些 Module 的命名也可以看出,他们之间应该都是处于同一个项目业务情况下的模块,彼此之间是有不可分割的业务关系的。

所以我们现在总结:一个 Project 是由一个或多个 Module 组成,模块之间尽量是处在同一个项目业务的的情况下,彼此之间互相依赖关联。这里用的是 尽量,因为 IntelliJ IDEA 的 Project 是一个没有具备任何编码设置、构建等开发功能的,主要起到一个项目定义、范围约束、规范等类型的效果,也许我们可以简单地理解为就是一个单纯的目录,只是这个目录命名上必须有其代表性的意义。

2.1.2 Libraries

Libraries:Libraries模块,其实就是将我们依赖的jar包进行分类, 一般选择Java ,而不选择From Maven。
这里添加架包和上面modules面板添加架包是一样的,不过这里可以起别名,便于自己对jar包的管理。

2.1.3 Facets

Facets表示某个module有的特征,比如web、strtus2、spring、hibernate等;

2.1.4 Artifacts

Artifacts是maven中的一个概念,表示某个module要如何打包,例如war exploded、war、jar、ear等等这种打包形式;

它的作用是整合编译后的 java 文件,资源文件等,有不同的整合方式,比如war、jar、war exploded 等,对于 Module 而言,有了 Artifact 就可以部署到 web 容器中了。其中 war 和 war exploded 区别就是后者不压缩,开发时选后者便于看到修改文件后的效果。

 

2.2 配置Artifacts

从上面2.1对Project Structure说明得知,我们要打包成jar就得用到Project Structure的Artifacts,操作如下:

打开菜单File -> Project Structure... ->Artifacts

最终的创建jar面板 如下图:

2.3 编译生成jar可执行文件

回到idea主界面,点菜单栏中的“Build”-->"Build Artifacets..."

看一下Project中是不是多了一个myjava.jar和META-INF目录,如下图所示:

我们还发现src目录中多了一个META-INF目录,必须注意的是,必须有MANIFEST.MF文件。

把上面的myjava.jar复制出来

把此文件复制到d盘根目录

 

三、运行jar

3.1 在本地windows上运行

直接用java命令运行试下:

开始菜单-->运行-->输入“cmd”回车 

java -jar d:\myjava.jar

效果如下图所示:

3.2 在centos服务器上运行

3.2.1 在centos的mysql数据库中生成数据

我的centos8上安装的是mysql8.0.20,我直接使用下面生成sql

CREATE DATABASE /*!32312 IF NOT EXISTS*/`hua` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */;

USE `hua`;

/*Table structure for table `stu` */

DROP TABLE IF EXISTS `stu`;

CREATE TABLE `stu` (
  `id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `sid` varchar(6) CHARACTER SET utf8 NOT NULL,
  `name` varchar(10) CHARACTER SET utf8 NOT NULL,
  `yuWen` float DEFAULT '0',
  `shuXue` float DEFAULT '0',
  `sex` char(2) CHARACTER SET utf8 NOT NULL DEFAULT '男',
  `zhiWei` char(6) CHARACTER SET utf8 NOT NULL DEFAULT '学生',
  PRIMARY KEY (`id`),
  UNIQUE KEY `sid` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

/*Data for the table `stu` */

insert  into `stu`(`id`,`sid`,`name`,`yuWen`,`shuXue`,`sex`,`zhiWei`) values 
(1,'1','张三',51,65,'男','学生'),
(2,'2','李四',71,80,'男','学生'),
(3,'3','王五',87.6,90,'男','学生'),
(4,'4','陈六',55.9,88,'男','学生'),
(5,'5','谢九',77,59,'男','学生'),
(6,'6','天天',45,90,'男','学生'),
(7,'7','开心',70,100,'女','学生'),
(8,'8','乐儿',65,50,'女','音乐委'),
(9,'9','乐乐',88,29.5,'女','学生'),
(10,'10','笑笑',73,69,'女','学生'),
(11,'11','fly',90,89,'男','学生'),
(12,'12','乐天',90,70,'男','副班长'),
(13,'13','云儿',95,65,'女','学生'),
(14,'14','伊洛',14,70,'男','班长'),
(15,'15','abc',86,98,'男','学生'),
(16,'16','菲菲',90,99,'女','学习委'),
(17,'17','mm',71,61,'女','学生'),
(18,'18','lilei',98,61,'男','学生'),
(19,'19','hua',90,99.5,'男','学生');

3.2.2 修改mysql连接IP 用户名 密码

我把mysq.class中的IP地址、用户名、密码都修改为我centos8上mysql的

String url = "jdbc:mysql://192.168.3.81:3306/huauseSSL=FALSE&serverTimezone=GMT%2B8";
String user = "hua";
String password = "hua123";

本地上运行mysql.class测试看一下,发现能连接,没问题

3.2.3 重新编译jar

因为前后我编译生成了jar,所以需要把它清一下

发现myjava.jar被清除了,如下图:

重新生成一个jar

复制出桌面

3.2.4 centos8上执行jar

我用xshell把刚刚复制出来的myjava.jar上传到centos8服务器的/disk1/t1目录下,运行即可

需要注意的是jdk一定也是14版本,如果不是就要升级一下

附录一、关于jar包

其实jar包可以用解压软件如winrar打开看一下内容:

其中com下面是lib目录的包,这里是mysql连接

里面是class文件是字节码文件,可以用java命令执行上面的class文件。

java -jar默认执行的是里面的mysql.class文件,如果要执行HelloWorld.class文件呢,可以用"-classpath"参数,语法如下:

java -classpath [jar-name] [filename]

现在执行一个命令测试一下:(文件名不要.class后缀)

[root@vm81 ~]# java -classpath /disk1/t1/myjava.jar HelloWorld
Hello World

猜你喜欢

转载自blog.csdn.net/hualinux/article/details/106663211