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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值