Linux巩固记录(2) java项目的编译和执行

时间:2022-06-18
本文章向大家介绍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哈哈~