1. 程式人生 > >Linux鞏固記錄(1) java項目的編譯和執行

Linux鞏固記錄(1) java項目的編譯和執行

mce frame cati readfile 知識 4.3 sse apach ast

由於要近期使用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鞏固記錄(1) java項目的編譯和執行