Linux巩固记录(2) java项目的编译和执行
由于要近期使用hadoop等进行相关任务执行,操作linux时候就多了
以前只在linux上配置J2EE项目执行环境,无非配置下jdk,部署tomcat,再通过docker或者jenkins自动部署上去
看下进程,复制粘贴删除等基本操作,很多东西久了不用就忘了,所有写个demo巩固下曾经的linux知识
后续会有hadoop等主流的大数据相关环境的搭建及使用
---------------------------------------------------------------------------------------------------------------------------------------------------------
这次讲最基本的java 编译
1.单个java文件的编译和运行
a 首先通过tree命令查看下目录结构(可通过 yum -y install tree 在线安装)
[root@master javaFile]# tree
.
├── lib
│ ├── commons-io-2.5.jar
│ └── spring-core-4.3.9.RELEASE-sources.jar
└── src
└── test
└── IOTest.java 3 directories, 3 files
[root@master javaFile]#
单个文件 如果有package 需要跟上-d 编译后存放路径
如果引用了其他jar包,这要用-classpath指出 多个jar包用冒号隔开
比如我的测试中需要引用两个jar包,并且是在test package下的
package test; import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils;
import org.springframework.util.StringUtils; public class IOTest { public static void main(String[] args) throws IOException {
File f = new File("/input.txt");
System.out.println(f.getAbsolutePath());
String result = FileUtils.readFileToString(f);
System.out.println(result); if(StringUtils.isEmpty(result)){
System.out.println("空文件");
} else {
System.out.println("非空文件");
}
}
}
那么编译命令就应该如下
[root@master javaFile]# javac -classpath .:/home/javaFile/lib/* -d /home/classes/ /home/javaFile/src/test/IOTest.java
Note: /home/javaFile/src/test/IOTest.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
[root@master javaFile]# tree /home/classes/
/home/classes/
├── org
│ └── springframework
│ └── util
│ ├── Assert.class
│ ├── CollectionUtils.class
│ ├── CollectionUtils$EnumerationIterator.class
│ ├── CollectionUtils$MultiValueMapAdapter.class
│ ├── MultiValueMap.class
│ ├── ObjectUtils.class
│ └── StringUtils.class
└── test
└── IOTest.class 4 directories, 8 files
[root@master javaFile]#
编译完成后应该按照如下命令执行
[root@master javaFile]# java -classpath /home/classes/:/home/javaFile/lib/* test.IOTest
/input.txt
test haha
非空文件
[root@master javaFile]#
2.编译多个java文件或者java项目
接1中代码,进行了简单修改,IOTest中需要调用TestUtil中代码
package test; import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils;
import org.springframework.util.StringUtils; import xiao.util.TestUtil; public class IOTest { public static void main(String[] args) throws IOException {
File f = new File("/input.txt");
System.out.println(f.getAbsolutePath());
String result = FileUtils.readFileToString(f);
System.out.println(result); if (StringUtils.isEmpty(result)) {
System.out.println("空文件");
} else {
System.out.println("非空文件");
} TestUtil.test("main msg");
}
}
package xiao.util; public class TestUtil { public static void test(String s) {
System.out.println("util :" + s);
} public static void main(String[] args) {
test("test utils msg");
}
}
a 首先通过tree命令查看下目录结构(可通过 yum -y install tree 在线安装)
[root@master javaFile]# tree
.
├── lib
│ ├── commons-io-2.5.jar
│ └── spring-core-4.3.9.RELEASE-sources.jar
└── src
├── test
│ └── IOTest.java
└── xiao
└── util
└── TestUtil.java 5 directories, 4 files
[root@master javaFile]#
b.生成需要编译的文件列表
[root@master javaFile]# find src -name \*.java > needCompileJavaFiles.txt
[root@master javaFile]# cat needCompileJavaFiles.txt
src/test/IOTest.java
src/xiao/util/TestUtil.java
[root@master javaFile]#
c. 开始编译
[root@master javaFile]# javac -classpath .:/home/javaFile/lib/* -d /home/classes/ @/home/javaFile/needCompileJavaFiles.txt
Note: src/test/IOTest.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
[root@master javaFile]# tree /home/classes/
/home/classes/
├── org
│ └── springframework
│ └── util
│ ├── Assert.class
│ ├── CollectionUtils.class
│ ├── CollectionUtils$EnumerationIterator.class
│ ├── CollectionUtils$MultiValueMapAdapter.class
│ ├── MultiValueMap.class
│ ├── ObjectUtils.class
│ └── StringUtils.class
├── test
│ └── IOTest.class
└── xiao
└── util
└── TestUtil.class 6 directories, 9 files
[root@master javaFile]#
d运行代码
[root@master javaFile]# java -classpath /home/classes/:/home/javaFile/lib/* test.IOTest
/input.txt
test haha
非空文件
util :main msg
[root@master javaFile]#
结果符合预期
ps web项目就不要在linux下自己编译了,拷贝的东西太多了,
通过其它工具如jenkins或者maven编译好了直接拷贝过来就好了
因为java跨平台嘛 O(∩_∩)O哈哈~
Linux巩固记录(2) java项目的编译和执行的更多相关文章
- Java 命令行 编译、执行、打包
Java 命令行 编译.执行.打包 一般来说 IDE 能够很方便的编译打包. 我写这篇文章是遇到了不能使用 IDE 的情况,简单记录一下,不做深入探讨. 环境 linux jdk 1.8 简单的编译执 ...
- 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...
- 在windows下使用cmd命令行对java文件进行编译和执行
windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量 相关配置链接:java基础学习总结—— ...
- Linux上Makefile管理java项目
前面文章讲到了Linux上通过.spec文件与rpmbuild命令将java程序打包为RPM安装包, 现阶段遇到新的需求: 使用Makefile来操纵java的编译.打包 该需求以前面的内容为基础 可 ...
- Jenkins与Git持续集成&&Linux上远程部署Java项目
一.环境搭建 1.安装所需软件 Jdk Maven Jenkins Tomcat Xshell git 以上软件去官网下载,比较简单,不一一描述了 2.安装所需的jenkins插件 Git plugi ...
- 在终端上创建Java项目及编译和运行
一:实践一次这样的操作有助于理解Tomcat/Eclipse的启动原理,包括classpath的设置,option的配置等等: 二:通过Bash终端创建一个简单的Java项目(单项目单Module,如 ...
- java代码的编译、执行过程
Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码 ...
- Java代码的编译和执行
Java代码编译和执行的整个过程包含了以下三个重要的机制: (1)Java源码编译机制 (2)类加载机制 (3)类执行机制 1.Java代码编译是由Java源码编译器来完成,流程图: Java 源码编 ...
- (转载)Eclipse将引用了第三方jar包的Java项目打包成可执行jar的两种方法
转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MA ...
随机推荐
- java学习第四周
这是暑假第四周,这周我继续学习了Java的基础知识. 了解到Java的类继承,学习到Java的接口的相关知识Java的每一个类都有且仅有一个直接父类,没有多重继承,但是接口可以继承多个,如果把接口看做 ...
- python中将两个数组压缩成一个数组
我们有时候会遇到一个问题将两个数组一一对应的压缩起来: 两个都是字符串: 列表解析[''.join(i) for i in zip(list_1, list_2)] map(lambda x,y:x+ ...
- HTML-入门篇day01
HTML-入门篇day01 1.web C/S:Client Server 客户端 服务器 QQ,... B/S:Browser Server 浏览器 服务器 PC机: ...
- 2018.10.29 bzoj4564: [Haoi2016]地图(仙人掌+莫队)
传送门 根据原图建一棵新的树. 把原图每一个环上除了深度最浅的点以外的点全部向深度最浅的点连边. 然后可以搞出来一个dfsdfsdfs. 这个时候我们就成功把问题转换成了对子树的询问. 然后就可以对权 ...
- 2018.10.29 洛谷P4129 [SHOI2006]仙人掌(仙人掌+高精度)
传送门 显然求出每一个环的大小. Ans=∏i(siz[i]+1)Ans=\prod_i(siz[i]+1)Ans=∏i(siz[i]+1) 注意用高精度存答案. 代码: #include<b ...
- lambda表达式,变量作用域
# lambda表达式 def filter_lt(predidcate,lt): result=[] for elem in lt: if predidcate(elem): result.appe ...
- C++之基于排序方法求一组数的中位数
中位数也就是中值: 故需要先对数组进行排序(选择,插入,冒泡排序),然后在找出数组的中值. //求中值 #include<iostream> using namespace std; in ...
- Mybatis-Plus 实战完整学习笔记(三)------导入MybatisPlus环境
1.dao层接口引入 package com.baidu.www.mplus.mapper; import com.baidu.www.mplus.bean.Employee; import com. ...
- Java交流分享(522818473)
今天来分享哈自己的技术交流群,记得还是刚接触Java建立的群,那时候学习Java很有动力,经常和群友谈论问题,现在都专注公司业务和技术这一块,很多后端框架都没用除了restful,其他都是封装的,不过 ...
- android:padding和android:margin的区别[转]
本文综合了:http://zhujiao.iteye.com/blog/1856980 和 http://blog.csdn.net/maikol/article/details/6048647 两篇 ...