The following is frequently used ant script, compile some java source codes with a libary path, then copy all non-java files to compiled folder:

<property name="src.dir" value="${basedir}/src" />

<property name="src.class.dir" value="${webroot.dir}/web-inf/classes" />

<path id="lib.path">

    <fileset dir="${webroot.dir}/web-inf/lib">

        <include name="**/*.jar" />

    </fileset>

</path>

<target name="compile-src" depends="init" description="compile java sources">

    <javac srcdir="${src.dir}" destdir="${src.class.dir}" encoding="utf-8"

            debug="true" classpathref="lib.path" failonerror="false"/>

    <copy todir="${src.class.dir}">

        <fileset dir="${src.dir}">

            <exclude name="**/*.java" />

        </fileset>

    </copy>

</target>

The corresponding shell script is:

src_dir=/vagrant/codes/GCP6.1/src

web_build=/vagrant/codes/web_build

class_dir=$web_build/web_server/webapps/GCP6.1/WEB-INF/classes

lib_dir=/vagrant/codes/GCP6.1/WebRoot/WEB-INF/lib

find $src_dir -type f -name "*.java" -exec javac -cp "$lib_dir/*:$src_dir" -d $class_dir {} \;

rsync -auC --exclude='*.java' $src_dir/ $class_dir/

Take care there's no folder named "core" in $src_dir, or it will be excluded by the "-C" option of rsync command.

A Test Case

$ tree

.

├── classes

├── lib

│   ├── libadd.jar

│   └── libmul.jar

├── libadd

│   └── com

│       └── boco

│           └── gcp

│               └── add

│                   ├── MyAdd.class

│                   └── MyAdd.java

├── libmul

│   └── com

│       └── boco

│           └── gcp

│               └── mul

│                   ├── MyMul.class

│                   └── MyMul.java

└── main

    └── com

        └── boco

            └── gcp

                ├── Test.java

                └── util

                    └── MyUtil.java

17 directories, 8 files

$ find . -name '*.java' -exec cat {} \; -exec echo "--------" \;

package com.boco.gcp.util;

import com.boco.gcp.add.MyAdd;

import com.boco.gcp.mul.MyMul;

public class MyUtil {

    public int newadd(int x, int y) {

        MyAdd add = new MyAdd();

        MyMul mul = new MyMul();

        return add.myadd(3,5) + mul.mymul(3,5);

    }

}

--------

package com.boco.gcp;

import com.boco.gcp.mul.MyMul;

import com.boco.gcp.add.MyAdd;

import com.boco.gcp.util.MyUtil;

public class Test {

    public static void main(String[] args) {

        MyMul mul = new MyMul();

        MyAdd add = new MyAdd();

        System.out.println(mul.mymul(3,5));

        System.out.println(add.myadd(3,5));

        MyUtil util = new MyUtil();

        System.out.println(util.newadd(3,5));

    }

}

--------

package com.boco.gcp.mul;

public class MyMul {

    public int mymul(int x, int y) {

        return 10*x*y;

    }

    public static void main(String[] args) {

        MyMul mul = new MyMul();

        System.out.println(mul.mymul(3,5));

    }

}

--------

package com.boco.gcp.add;

public class MyAdd {

    public int myadd(int x, int y){

        return 10*x+y;

    }

    public static void main(String[] args) {

        MyAdd add = new MyAdd();

        System.out.println(add.myadd(3,5));

    }

}

--------

$ find main -name '*.java' -exec javac -cp 'lib/*:main' {} -d classes \;

$ tree classes/

classes/

└── com

    └── boco

        └── gcp

            ├── Test.class

            └── util

                └── MyUtil.class

Compile Java Codes in Linux Shell instead of Ant Script的更多相关文章

  1. java代码运行linux shell操作

    1.Java调用shell  Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...

  2. Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息

    pom.xml jar 包支持 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch& ...

  3. java使用Runtime.exec()运行windwos dos或linux shell命令

    使用Runtime.exec()运行windwos dos或linux shell命令,按实际情况具体测试     实例代码: package com.bookoo.test.command; imp ...

  4. Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比

    Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比: Unix/Linux (Bash) Windows(MS-DOS) Java 进入目录 cd cd - 创建 ...

  5. java远程调用linux的命令或者脚本

    转载自:http://eksliang.iteye.com/blog/2105862 Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) 使用步骤如下 ...

  6. java classpath批量设置shell脚本

    java classpath批量设置shell脚本   注意:linux bash jar文件之间的分隔符是':'    export JAR_HOME=path to directory which ...

  7. linux shell 使用总结

    为什么执行脚本要使用./ +脚本名来执行脚本理解:因为如果直接使用脚本名,那么linux 系统会去path 路径查找如去/bin usr/bin 等查找,这个时候会找不到这个脚本名字,就会报错.使用. ...

  8. paip.注册java程序为LINUX系统服务的总结。

    paip.注册java程序为LINUX系统服务的总结. ////////////////实现开机启动. 标准方法是按照/etc/init.d/下面的文件,修改一下:然后chkconfig xxx on ...

  9. linux shell 流程控制

    导读 和Java.PHP等语言不一样,linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介绍下,各个语句使 ...

随机推荐

  1. 并发王者课-铂金10:能工巧匠-ThreadLocal如何为线程打造私有数据空间

    欢迎来到<并发王者课>,本文是该系列文章中的第23篇,铂金中的第10篇. 说起ThreadLocal,相信你对它的名字一定不陌生.在并发编程中,它有着较高的出场率,并且也是面试中的高频面试 ...

  2. Vue:node.js与vue安装配置

    下载node.js 官网: https://nodejs.org/zh-cn/ 查看node版本 node -v 配置淘宝NPM镜像源(下载速度快) npm install -g cnpm --reg ...

  3. Leetcode No.119 Pascal's Triangle II(c++实现)

    1. 题目 1.1 英文题目 Given an integer rowIndex, return the rowIndexth (0-indexed) row of the Pascal's tria ...

  4. 不同版本docker修改存储位置补充

    前言:最近发现yum安装docker,安装的版本不一样,有点蛇皮,虽然存放默认位置都是/var/lib/docker,但是它的配置文件不一样,这里做个补充 对于docker版本是1.13及以下 操作如 ...

  5. STM32笔记二

    1.STM32编程通常有两种方法:一种是寄存器编程,另外一种是固件库编程.寄存器编程是基础,而固件库是寄存器编程的基础上升级而来的编程方法,是需要重点掌握的编程方法. 2.STM32F103采用的是C ...

  6. asp.net core 视图组件(转)

    介绍视图组件 视图组件是 ASP.NET Core MVC 中的新特性,与局部视图相似,但是它们更加的强大.视图组件不使用模型绑定,只取决于调用它时所提供的数据.视图组件有以下特点: 渲染一个块,而不 ...

  7. 卧槽,原来不需要FQ就可以构建海外镜像

    一. 背景 使用docker或者k8s的过程中,我们可能遇到镜像无法下载的情况,例如:kubernetes的kube-apiserver镜像,这是因为其仓库在海外,我们的网络被墙,我发获取到该资源,使 ...

  8. CTF-wtc_rsa_bbq-writeup

    wtc_rsa_bbq 题目信息: 附件: cry200 解题思路: 1.观察cry200文件,发现该文件是一个二进制文件,用二进制模式查看,发现开头为50 4B 03 04,判断该文件是一个zip文 ...

  9. 使用pymysql循环删除重复数据,并修改自增字段偏移值

    创建表: CREATE TABLE `info` ( `id` tinyint NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, PRIMAR ...

  10. Nacos 2.0源码分析-拦截器机制

    温馨提示: 本文内容基于个人学习Nacos 2.0.1版本代码总结而来,因个人理解差异,不保证完全正确.如有理解错误之处欢迎各位拍砖指正,相互学习:转载请注明出处. Nacos服务端在处理健康检查和心 ...