侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Shell执行/调用Java/Jar程序例子的实例详解

Java  /  管理员 发布于 8年前   247

Shell执行/调用Java/Jar程序例子的实例详解

前言:

最近要写一个独立的Java程序去监控Hadoop和Oozie,通过Shell去调用.写代码到现在也4年多了,貌似就从来没在生产环境中写过一个独立的Java程序,不是部署到Tomcat就是直接丢给Hadoop.于是参考Hadoop等开源环境,自己写了一个demo,并且可以通过Ant打包生成可运行的程序.所以这里有三步:Java程序,Shell,Ant

     1.首先建立Java程序,由于是例子,所以这里很简单,只是输出传入参数的个数,

代码如下:

package com.guoyun.study.shell;  public class ShellJavaAnt {    /**    * @param args    */   public static void main(String[] args) {     System.out.println("arguments length:"+args.length);   }  }  

    2.Shell脚本

Shell代码 

#!/bin/bash # PRG="${0}" while [ -h "${PRG}" ]; do  ls=`ls -ld "${PRG}"`  link=`expr "$ls" : '.*-> \(.*\)$'`  if expr "$link" : '/.*' > /dev/null; then   PRG="$link"  else   PRG=`dirname "${PRG}"`/"$link"  fi done  BASEDIR=`dirname ${PRG}` BASEDIR=`cd ${BASEDIR}/..;pwd`   if test -z ${JAVA_HOME} then   JAVA_BIN=java else   JAVA_BIN=${JAVA_HOME}/bin/java fi  CLASS_PATH=$BASEDIR/shell-run-java-by-ant-*.jar SERVICE_CLASS="com.guoyun.study.shell.ShellJavaAnt"  ${JAVA_BIN} -cp $CLASS_PATH ${SERVICE_CLASS} "${@}"  exit 0 

    3.ANT

Xml代码 

<project name="shell-run-java-by-ant" default="release-jar" basedir=".">   <property file="build.properties" />     <property name="jar.name" value="shell-run-java-by-ant" />  <property name="version" value="0.1" />  <property name="package.name" value="${jar.name}-${version}" />   <property name="build.dir" location="build" />  <property name="build.cache.dir" location="${build.dir}/cache" />  <property name="build.lib.dir" location="${build.dir}/lib" />  <property name="javadoc.dir" location="javadoc" />  <property name="dist.dir" location="dist" />  <property name="dist.java.dir" location="${dist.jar}/java" />  <property name="package.dir" location="${dist.dir}/${package.name}" />  <property name="tar.file" location="${dist.dir}/${jar.name}-${version}.tar.gz" />    <property name="src.dir" location="src" />  <property name="java.src.dir" location="${src.dir}/java" />  <property name="test.src.dir" location="${src.dir}/test" />   <property name="classes.dir" location="${build.dir}/classes" />  <property name="lib.dir" value="${basedir}/lib"/>  <property name="script.dir" value="${basedir}/script"/>    <target name="release" description="sets properties for release builds.">     <echo message="Building in release mode..."/>     <property name="compile.mode" value="release"/>     <property name="java.debug" value="false"/>  </target>   <target name="init">   <tstamp/>   <mkdir dir="${build.dir}" />   <mkdir dir="${classes.dir}" />  </target>   <macrodef name="compile-source">   <sequential>   <javac srcdir="${java.src.dir}" destdir="${classes.dir}" debug="${java.debug}" debuglevel="lines,vars,source">    <classpath>     <fileset dir="lib">      <include name="**/*.jar"/>     </fileset>    </classpath>   </javac>   </sequential>  </macrodef>   <target name="compile" depends="init" description="compile the source">   <compile-source />  </target>     <target name="jar" depends="compile">   <delete file="${build.dir}/${jar.name}-${version}.jar"/>   <jar jarfile="${build.dir}/${jar.name}-${version}.jar">    <fileset dir="${classes.dir}"/>   </jar>  </target>     <target name="package" depends="clean, jar">   <mkdir dir="${package.dir}"/>   <mkdir dir="${package.dir}/lib"/>   <mkdir dir="${package.dir}/bin" />    <copy todir="${package.dir}/lib" includeEmptyDirs="false">    <fileset dir="${lib.dir}">     <include name="**/*" />    </fileset>   </copy>   <copy todir="${package.dir}">    <fileset file="${build.dir}/${jar.name}-${version}.jar"/>   </copy>   <copy todir="${package.dir}/" file="build.xml"/>   <copy todir="${package.dir}/bin" includeEmptyDirs="false">       <fileset dir="${basedir}/script/shell">         <include name="**/*" />       </fileset>   </copy>      <chmod file="${package.dir}/bin/*" perm="ugo+rx"/>  </target>   <target name="tar" depends="package" description="Create release tarball">   <tar compression="gzip" longfile="gnu" destfile="${tar.file}">    <tarfileset dir="${package.dir}" mode="777" prefix="${package.name}">     <exclude name="bin/*" />     <exclude name="**/*.sh" />     <include name="**" />    </tarfileset>    <tarfileset dir="${package.dir}" mode="777" prefix="${package.name}">     <include name="**/*.sh" />    </tarfileset>   </tar>   <delete dir="${package.dir}" />  </target>    <target name="javadoc" depends="compile" description="generate documentation" >   <delete dir="${javadoc.dir}" />   <javadoc destdir="${javadoc.dir}">    <fileset dir="${java.src.dir}" />    <classpath>     <fileset dir="${lib.dir}">      <include name="**/*.jar"/>     </fileset>    </classpath>   </javadoc>  </target>   <target name="release-jar" description="Build release and jar" depends="release,jar"/>   <target name="clean" description="clean up">   <delete dir="${build.dir}"/>   <delete dir="${classes.dir}" />   <delete dir="${dist.dir}"/>  </target>  </project> 

    由于比较简单,这里就不多做注释,完整例子,请见附件.使用的话,只要进入你的工程,运行ant package,便会将程序打包到$YOUR_PROJECT/dist目录下.之后进入该程序运行bin/shell-java-ant  a b c d e f g,就会得到arguments length:7
这样子的输出.

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


  • 上一条:
    通过Spring Shell 开发 Java 命令行应用
    下一条:
    linux上配置jdk时,java命令提示没有此文件或文件夹的解决方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在java中实现的脱敏工具类代码示例分享(0个评论)
    • zookeeper安装流程步骤(0个评论)
    • 在java中你背的“八股文”可能已经过时了(2个评论)
    • 在php8.0+版本中使用属性来增加值代码示例(3个评论)
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2018-03
    • 2020-03
    • 2023-05
    • 2023-11
    • 2024-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客