Compile Java Codes in Linux Shell instead of Ant Script
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的更多相关文章
- java代码运行linux shell操作
1.Java调用shell Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...
- Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息
pom.xml jar 包支持 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch& ...
- java使用Runtime.exec()运行windwos dos或linux shell命令
使用Runtime.exec()运行windwos dos或linux shell命令,按实际情况具体测试 实例代码: package com.bookoo.test.command; imp ...
- Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比
Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比: Unix/Linux (Bash) Windows(MS-DOS) Java 进入目录 cd cd - 创建 ...
- java远程调用linux的命令或者脚本
转载自:http://eksliang.iteye.com/blog/2105862 Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) 使用步骤如下 ...
- java classpath批量设置shell脚本
java classpath批量设置shell脚本 注意:linux bash jar文件之间的分隔符是':' export JAR_HOME=path to directory which ...
- linux shell 使用总结
为什么执行脚本要使用./ +脚本名来执行脚本理解:因为如果直接使用脚本名,那么linux 系统会去path 路径查找如去/bin usr/bin 等查找,这个时候会找不到这个脚本名字,就会报错.使用. ...
- paip.注册java程序为LINUX系统服务的总结。
paip.注册java程序为LINUX系统服务的总结. ////////////////实现开机启动. 标准方法是按照/etc/init.d/下面的文件,修改一下:然后chkconfig xxx on ...
- linux shell 流程控制
导读 和Java.PHP等语言不一样,linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介绍下,各个语句使 ...
随机推荐
- Gym 101334E dp
分析: 这一题给出的遍历的点的序列,不是树的中序遍历,前序遍历,只要遇到一个节点就打印一个节点.关键点就在,这个序列的首字母和尾字母一定要相同,因为最终都会回到根节点,那么每一个子树也一样. 状态: ...
- Hadoop:Hadoop的学习路线
Hadoop生态架构技术 1.语言基础 Java:掌握javase知识,多理解和实践在Java虚拟机的内存管理.以及多线程.线程池.设计模式.并行化就可以,不需要深入掌握. Linux:系统安装( ...
- mysql大量数据分页查询优化-延迟关联
所有的php初学者都应该知道,mysql的分页语句写法如下: 1 select * from a limit (page-1)*page_size,page_size 而当这语句分页到一定程度时,例如 ...
- chrome 屏蔽广告的利器
Adblock Plus https://chrome.google.com/webstore/detail/adblock-plus/cfhdojbkjhnklbpkdaibdccddilifddb ...
- edraw max for mac 安装
1.下载网址:https://xclient.info/s/edraw-max.html#versions 2.安装断网安装,直接打开 .dmg文件安装 3.按照阅读文件中的第二步,将opt.cell ...
- 带实习生学Spring Boot 之 Spring Profiles
大家好,我是指北君. 最近公司新来了一个实习生,挺上进的,天天追着我问问题.指北君开启了带实习生打怪升级之路.吶,今天问了一个关于 Spring Profiles 的问题. 实习生:指北君,你知道 S ...
- Js中的防抖与节流函数
1.何为防抖与节流函数呢? 1.防抖(debounce):通过setTimeout方式,在一定的时间间隔内,将多次触发的事件转化为一次触发.也就是说当一个用户一直触发这个函数,且每次触发函数的间隔小于 ...
- Docker以过时,看Containerd怎样一统天下
Docker作为非常流行的容器技术,之前经常有文章说它被K8S弃用了,取而代之的是另一种容器技术containerd!其实containerd只是从Docker中分离出来的底层容器运行时,使用起来和D ...
- 小哈学python----一行代码输出特定字符"Love"拼成的心形
print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2* ...
- C语言typedef的用法详解
C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...