`
445822357
  • 浏览: 738820 次
文章分类
社区版块
存档分类
最新评论

ubuntu下使用java、javac命令行编译工程

 
阅读更多

一、java和javac命令行

(1)javac命令行

javac.exe用于编译java源文件,生成.class文件

语法:javac [option] source

常用的[option]选项:

A、-classpath <路径>(-cp缩写):指定要使用的类路径或要使用的jar包的路径(jar文件、zip文件(里面都是错啦搜索文件)),使用后

会覆盖CLASSPATH的设定

B、-d <路径> :指定源文件编译后生成.class文件的存放位置


(2)java命令行

java.exe用于运行javac编译后生成的.class文件

语法:java [option] classname [arguments]

常用的[option]选项:

A、-classpath <路径>(-cp缩写):指定要使用的类路径或要使用的jar包的路径(jar文件、zip文件(里面都是错啦搜索文件)),使用后

会覆盖CLASSPATH的设定

B、[arguments]:传递给main函数的参数


二、例子

(1)单独一个java程序

Demo.java

public class Demo{
    public static void main(String args[]){
               System.out.println("This is a test");
 }
}

javac Demo.java-----------在当前目录下生成Demo.class文件

java Demo-------------------执行Demo.class


也可以通过-d选项指定生成.class文件的位置,如:

javac -d .. Demo.java ,则就会在当前目录的上一级目录上生成Demo.class文件,那么执行的时候,就要指定class的路径

java -cp .. Demo,表示让java在上一级目录搜索类文件


(2)一个带包的java程序

Demo.java

package com.demo;
public class Demo{
    public static void main(String args[]){
               System.out.println("This is a test");
 }
}
同样,现编译文件:

javac Demo.java-----------在当前目录下生成Demo.class文件

java Demo-------------------执行Demo.class


也可以通过-d选项指定生成.class文件的位置,如:

javac -d . Demo.java-----------按照com.demo的包路径保存.class文件

则会在当前目录下生成一个com/demo/Demo.class文件,如下图:

那么在执行的时候,也要指定类文件的路径:

javac com/demo/Demo或者javac com.demo.Demo


(3)同一个包下,一个类调用另一个类

Tom.java

package com.demo;
public class Tom{
 public String getMyname(){
 return "This is Tom!";
}
}

Friend.java

package com.demo;

import com.demo.Tom;

public class Friend{
    public static void main(String args[]){
        Tom tom = new Tom();
        System.out.println("hello "+tom.getMyname());
}
}
由于Friend类条用了Tom类,首先要现编译Tom.java:javac -d . Tom.java,然会会按照包结构生成com/demo/Tom.class文件。

接下来编译Friend.java文件:javac -cp . -d . Friend.java,javac会根据,import com.demo.Tom;这个路径到 -cp 指示的 "."当前目录下寻找,然后按照包结构生成com/demo/Friend.class,见下图:

运行:java com.demo.Friend


(4)一个包下的类条用另一个包下的类


Tom.java

package com.demo1;
public class Tom{
 public String getMyname(){
 return "This is Tom!";
}
}

Friend.java

package com.demo2;

import com.demo1.Tom;

public class Friend{
    public static void main(String args[]){
        Tom tom = new Tom();
        System.out.println("hello "+tom.getMyname());
}
}
还是一样,现编译Tom.java,javac -d . Tom.java,生成com/demo1/Tom.class;

然后编译Friend.java,javac -cp . -d . Friend.java,生成com/demo2/Friend.class;


运行:java com.demo2.Friend;


(5)更接近项目的java工程

一般,一个工程下面都会有lib(引入的必要jar包),classes(保存.class文件),src(.java源代码)三个文件夹。

java文件夹的目录结构如下,文件之间的关系是Client.java调用了DemoService.java的方法;ServerImpl.java调用了DemoService.java的方法;Server.java调用了ServerImpl.java和DemoService.java的方法;

下面的文件,我只显示他们引用的包和类。

src/com/client/Client.java:

package com.client;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

import com.demo.DemoService;
 

public class Client {
	
	.................................................................................

}
src/com/demo/DemoService.java:
/**
 * Autogenerated by Thrift Compiler (0.9.0)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */

package com.demo;
import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;

import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.protocol.TTupleProtocol;
import org.apache.thrift.protocol.TProtocolException;
import org.apache.thrift.EncodingUtils;
import org.apache.thrift.TException;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DemoService {
.................................................................
}
src/com/server/Server.java:

package com.server;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;

import com.demo.DemoService;
import com.server.ServerImpl;

public class Server {
	
..................................................................................

}

make.sh脚本如下:

#!/bin/bash

# Get current position
TOP_DIR=$(pwd)

# Add all necessary jars
LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar:lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar:lib/junit-4.4.jar:lib/libthrift-1.0.0.jar:lib/log4j-1.2.14.jar:lib/servlet-api-2.5.jar:lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar

#compile java file
javac -cp $LIBPATH                  src/com/demo/DemoService.java  -d ./classes/. 
javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/ServerImpl.java -d ./classes/.
javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/Server.java     -d ./classes/.
javac -cp $TOP_DIR/classes:$LIBPATH src/com/client/Client.java     -d ./classes/.

run.sh脚本如下:

#!/bin/bash

#Get client/server
SIDE=$1

# Get current position
TOP_DIR=$(pwd)

# Add all necessary jars
LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar:lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar:lib/junit-4.4.jar:lib/libthrift-1.0.0.jar:lib/log4j-1.2.14.jar:lib/servlet-api-2.5.jar:lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar

#run program
if [ $SIDE == "server" ];then
    java -cp $TOP_DIR/classes:$LIBPATH  com/server/Server
else
    java -cp $TOP_DIR/classes:$LIBPATH  com/client/Client
fi

进入thriftDemo文件夹下,执行./make.sh脚本,在classes文件夹下生成的文件如下:



参考:wenku.baidu.com/view/f4c19dbc65ce0508763213c6.html







分享到:
评论

相关推荐

    java代码命令行编译在手机上运行的示例

    java代码命令行编译在手机上运行的示例。 chcp 65001 javac -encoding utf-8 ./org/test/TestJava.java dx --dex --output =D:\pro\TestJava.dex .\org\test\TestJava.class

    Java程序设计基础:使用命令行方式开发Java程序.pptx

    使用命令行方式开发Java程序 使用命令行方式开发Java程序 Java程序的运行机制 了解Java程序的运行机制 掌握使用命令行方式开发Java程序的步骤 Java程序的运行机制 编写源程序 编译源程序 由Java解释器解释运行 字节...

    JAVA程序命令行下的执行

    JAVA程序命令行下的执行 IED用惯了,基础都快忘记了 javac 先不说了,环境变量里面设置对了基本没什么问题。关键是java这个命令 java -classpath .class的类路径(如果是包的话,需要指定到包上面的路径);引用的类路径...

    Java零基础 - 使用javac编译Java程序.md

    本文详细介绍了如何使用javac命令来编译Java程序,并附带了示例源码。通过阅读本文,您将学习到以下内容: 编写Java源代码的示例; 打开命令提示符或终端的方法; 导航到Java源代码所在目录的步骤; 使用javac...

    命令行下的Java编译工具

    本人08年开始接触Java,初学者当然是使用黑框框编译啦,可是JDK编译器手动太麻烦,又要javac源文件,又要java主类名,还有Applet又要手动写html,包含自定义包文件又要重新输入包文件路径。 故特意编写此编译工具,只...

    Java毕业设计源码-基于JavajavaC语言试题生成与考试系统(源代码)(IT计算机专业Java源代码资料).zip

    Java毕业设计源码-基于JavajavaC语言试题生成与考试系统(源代码)(IT计算机专业Java源代码资料).zipJava毕业设计源码-基于JavajavaC语言试题生成与考试系统(源代码)(IT计算机专业Java源代码资料).zipJava毕业设计...

    Dos环境下使用javac编译与java执行多个包下的.java文件

    NULL 博文链接:https://qn-lf.iteye.com/blog/990975

    javac源代码,java具体编译步骤

    这是javac源代码,很多时候,我们使用java语言开发的时候,都知道是通过javac编译的,但是具体的编译过程是怎么样的?就需要通过源码来研究。

    关于java在cmd命令行的编译和运行问题

    关于java在cmd命令行的编译和运行问题的解决方法 典型的java.lang.ClassNotDefFoundError异常的解决方案 和配置classpath需要注意的问题

    java编译的javac.jar

    java编译的javac.jar

    Java零基础 - 使用java命令运行Java程序.md

    使用javac编译器编译Java程序的方法; 使用java命令运行Java程序的方法。 内容概要: 编写示例源码; 使用javac编译器编译Java程序; 使用java命令运行Java程序。 阅读建议: 在编写Java源代码之前,请确保已经...

    java与javac命令详解

    很多人都会使用IDE编写代码。但是最基本的Java基础java与javac命令可能大家都没这么在意。而这个正是OCJP证书或者笔试必考的内容。

    JAVA小程序编译窗体

    运用Java编译小程序,实现窗体输出字符,并点击退出按钮实现窗体关闭

    java udp转发工程,可直接在命令行运行

    .java 文件可以拷贝出去使用,根据具体情况设置目标端口号和目标IP 直接使用Retransmission.java,在文件目录下打开命令行,输入: javac Retransmission.java java Retransmission 亦可以将工程导入eclipse中运行

    命令行方式打包带有库项目(libraryProject)引用的Android项目用脚本

    使用命令行工具对Android项目进行打包签名和生成,涉及的技术有支持引入第三方jar包,支持项目引用库项目进行资源共享。 此脚本为三个文件,是在Sodino公开的脚本上进行修改而来。第一个为生成中间文件,第二个为...

    JAVAC动态编译

    NULL 博文链接:https://cwj158.iteye.com/blog/1278988

    javac_可以编译目录.rar

    jdk9 javac编译器 源码 当前可以根据用目录作为参数进行编译 谢谢

    java javac

    非常有用的java程序,两个人类与书类,并设置两者的关系,试用人去找书,书去找人,假如某人有一个儿子,它也有一本书,试用儿子去找书,书找儿子。

    Java快速命令编译助手(JCR)

    这两个程序的区别是,一个会把生成的class文件统一放到C盘,另一个是在当前目录下生成一个class文件夹,凭自己习惯选择使用吧,你当然也可以再Java文件打开方式中加入本程序,会更方便! Test.java是我编写的一个例...

Global site tag (gtag.js) - Google Analytics