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

Posted 肖哥哥  changw.xiao@qq.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux巩固记录 java项目的编译和执行相关的知识,希望对你有一定的参考价值。

由于要近期使用hadoop等进行相关任务执行,操作linux时候就多了

以前只在linux上配置J2EE项目执行环境,无非配置下jdk,部署tomcat,再通过docker或者jenkins自动部署上去

看下进程,复制粘贴删除等基本操作,很多东西久了不用就忘了,所有写个demo巩固下曾经的linux知识

后续会有hadoop等主流的大数据相关环境的搭建及使用

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

这次讲最基本的java 编译  

1.单个java文件的编译和运行

a 首先通过tree命令查看下目录结构(可通过 yum -y install tree 在线安装)

[[email protected] javaFile]# tree
.
├── lib
│   ├── commons-io-2.5.jar
│   └── spring-core-4.3.9.RELEASE-sources.jar
└── src
    └── test
        └── IOTest.java

3 directories, 3 files
[[email protected] 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("非空文件");
        }
    }
}

那么编译命令就应该如下

[[email protected] 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.
[[email protected] 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
[[email protected] javaFile]# 

编译完成后应该按照如下命令执行

[[email protected] javaFile]# java -classpath /home/classes/:/home/javaFile/lib/* test.IOTest
/input.txt
test haha 
非空文件
[[email protected] 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 在线安装)

[[email protected] 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
[[email protected] javaFile]# 

b.生成需要编译的文件列表

[[email protected] javaFile]# find src -name \*.java > needCompileJavaFiles.txt
[[email protected] javaFile]# cat needCompileJavaFiles.txt 
src/test/IOTest.java
src/xiao/util/TestUtil.java
[[email protected] javaFile]# 

c. 开始编译

[[email protected] 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.
[[email protected] 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
[[email protected] javaFile]# 

d运行代码

[[email protected] javaFile]# java -classpath /home/classes/:/home/javaFile/lib/* test.IOTest
/input.txt
test haha 
非空文件
util :main msg
[[email protected] javaFile]# 

结果符合预期 

 

ps web项目就不要在linux下自己编译了,拷贝的东西太多了,

通过其它工具如jenkins或者maven编译好了直接拷贝过来就好了  

因为java跨平台嘛  O(∩_∩)O哈哈~

以上是关于Linux巩固记录 java项目的编译和执行的主要内容,如果未能解决你的问题,请参考以下文章

Java基础巩固——《Java核心技术基础·卷一:基础知识》

Linux巩固记录 hadoop 2.7.4 环境搭建

Linux巩固记录 J2EE开发环境搭建及网络配置

在linux下怎么编译和运行java程序

关于 .pyx文件的编译和导入

Java基础知识强化(用于自我巩固)以及审查