手动编译并运行Java项目的过程

您所在的位置:网站首页 java如何编译 手动编译并运行Java项目的过程

手动编译并运行Java项目的过程

2024-07-10 09:05:16| 来源: 网络整理| 查看: 265

  现在Java开发基本上就是IDE调试,如果跨平台打个jar包过去运行一般就可以了,但是有些情况比如需要引入外部依赖的时候,这个时候是不能直接运行的,还需要引入一些外部的参数,并不是简单的javac和java的关系了,下面来详细说一下

  一般情况下,在本地都是使用eclipse开发工具进行开发,很多东西基本上就不用我们考虑了,如果我们要将项目放到Linux下运行的话,那么就需要进行转移的操作,当然有Maven、Ant这样的自动化部署工具,简直是太方便了,为了做到更进一步认识的话,我们纯手动的去打包一个java的项目

  首先,项目名称为JarTest,在eclipse结构如下图所示:

  

  包名和类名都看的非常清楚了,App是主类,包含有main方法;TestBean是一个JavaBean实体;TestService是一个利用TestBean进行简单计算的类,那么各个类的代码如下:

App.java

1 package net.javatest.package1; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import net.javatest.package2.TestBean; 7 import net.javatest.package3.TestService; 8 9 public class App { 10 11 public static void main(String[] args) { 12 List tb = new ArrayList(); 13 String[] names = {"hacker","nginx","github","hadoop","storm","solr","kafka","spark"}; 14 for(int i = 0;i < names.length;i++) { 15 tb.add(new TestBean(String.valueOf(i),names[i])); 16 } 17 List namelist = TestService.nameList(tb); 18 for(int i = 0;i < namelist.size();i++) { 19 System.out.println(namelist.get(i)); 20 } 21 } 22 23 }

TestBean.java

1 package net.javatest.package2; 2 3 public class TestBean { 4 private String id; 5 private String name; 6 7 public TestBean() { 8 9 } 10 11 public TestBean(String id, String name) { 12 this.id = id; 13 this.name = name; 14 } 15 16 public String getId() { 17 return id; 18 } 19 public void setId(String id) { 20 this.id = id; 21 } 22 public String getName() { 23 return name; 24 } 25 public void setName(String name) { 26 this.name = name; 27 } 28 }

TestService.java

1 package net.javatest.package3; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import net.javatest.package2.TestBean; 7 8 public class TestService { 9 10 public static List nameList(List tbs) { 11 List names = new ArrayList(); 12 for(TestBean tb : tbs) { 13 names.add(tb.getName()); 14 } 15 return names; 16 } 17 18 }

  文件就是这样,源程序都不依赖于外部包,其实在eclipse中自动已经进行编译成class了,我们可以直接使用class文件,在这里我们直接使用源文件进行编译,首先打包上传项目,压缩成JarTest.zip上传到服务器,

  

  接下来解压释放目录:

unzip JarTest.zip cd JarTest/src

  因为我们打包项目的时候打包的项目外层目录,所以解压出来需要进入JarTest这个目录,我们的源代码文件在src中,现在开始编译:

javac net/javatest/package1/App.java net/javatest/package2/TestBean.java net/javatest/package3/TestService.java

  这样回车之后,没任何提示就编译好了,现在每个包下都有一个和源文件对应的class文件,如果感觉上面太长太麻烦,可以使用通配符全部搞定编译:

javac net/javatest/package*/*.java

  这样就全部编译完了,现在我们可以执行一下看一下运行结果,

java net.javatest.package1.App

  这样就可以直接App的main方法了,接下来可以进行打包,打成一个jar包,用起来更方便,我们可以用eclipse打成jar包看一下目录结构,我们会发现jar包如果解压出来之后,会看到META-INF的一个目录,这个目录中有一个MANIFEST.MF文件,这个文件就是定义如何导入外部jar包以及主类的存在位置,接下来我们自己编写MANIFEST.MF这个文件,我们使用命令: vim MANIFEST.MF 创建一个文件,直接在当前也就是src目录下创建即可,然后我们编辑以下内容:

1 Manifest-Version: 1.0 2 Main-Class: net.javatest.package1.App 3 4

  第一行是固定格式,定义版本号,第二行就是指明主类的位置可以用空格分开多个声明,注意冒号之后要有一个空格;然后注意的就是后面需要空出2行,输入两次换号即可,然后我们保存退出,执行下面命令打包:

jar -cvfm jartest.jar MANIFEST.MF net/

  其中jartest.jar就是要打的包,net就是我们的包目录,现在我们就可以看到一个jartest.jar这样一个文件,

  

  然后我们执行下面命令就可以运行该jar文件了

java -jar jartest.jar

  如果jar包中具有多个包含main方法的类时,需要指定Main-Class定义的其中之一,命令如下:

java -jar jartest.jar net.javatest.package1.App

  以上是没有任何外部依赖的Java项目的运行,如果有其他依赖的话,具体运行情况如下,我们将刚才打好的jar包下载,然后新建另外一个项目去调用jar包里面类中的方法,项目如下:

  

  只有一个主类,代码很简单,就是调用了jartest.jar的方法,JarTest2.java代码如下:

1 package net.javatest; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import net.javatest.package2.TestBean; 7 import net.javatest.package3.TestService; 8 9 public class JarTest2 { 10 11 public static void main(String[] args) { 12 List tb = new ArrayList(); 13 String[] names = {"test2","nginx","hbase","hadoop","storm","solr","kafka","spark"}; 14 for(int i = 0;i < names.length;i++) { 15 tb.add(new TestBean(String.valueOf(i),names[i])); 16 } 17 List namelist = TestService.nameList(tb); 18 for(int i = 0;i < namelist.size();i++) { 19 System.out.println(namelist.get(i)); 20 } 21 } 22 23 }

  这时候将jartest.jar导入项目的path里面,编译的时候就不会出错了,我们继续上传该项目,进行编译,编译命令如下:

javac -classpath ../lib/jartest.jar: net/javatest/JarTest2.java

  导入多个外部jar包时需要用:分割,并且最后一个后面必须有冒号,-classpath参数用于指定外部jar包和类文件都可以,运行的时候也需要进行包含,运行命令如下:

java -classpath ../lib/jartest.jar: net.javatest.JarTest2

  接下来将项目打包,打包之前同样执行 vim MANIFEST.MF 编辑文件如下:

1 Manifest-Version: 1.0 2 Main-Class: net.javatest.JarTest2 3 Class-Path: lib/jartest.jar 4 5

  这里第三行导入外部jar包文件,多个文件依赖用空格分隔,目录无所谓这里是相对于打包后jar文件的目录,就是说lib目录和打包后的jar文件在一个目录即可正常运行,接下来打包:

jar -cvfm jartest2.jar MANIFEST.MF net/

  打包后直接使用 java -jar jattest.jar 是不能执行的,需要将刚才的lib复制过来才可以,执行下面命令:

cd .. cp -r lib/ src/

  复制刚才的lib目录过来即可,现在执行 java -jar jartest2.jar 即可正常运行了

  综合来说,对于一个复杂的项目,编译以及运行时除了系统类库的支持,还需要引入外部jar包或者类文件才能保证整个项目的正常运行,具体的执行流程需要不断地去熟悉

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭