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哈哈~