java makefile学习实践(编译的javac命令写在makefile中,运行命令java写在shell脚本中)

学习makefile教程,ubuntu中文网

1.写一个简单的java项目,不需要外部jar,用的简单的

import java.util.ArrayList;是可以从CLASSPATH环境变量中找到的,在javac阶段不需要特殊添加-cp

hellocat

Hellocat.java

import java.util.ArrayList;
import java.util.Iterator;
public class Hellocat{
    public static void main(String[] args){
        ArrayList list1 = new ArrayList();
        list1.add("one");
        list1.add("two");
        System.out.println("<--list1中共有>" + list1.size()+ "个元素");  
        System.out.println("<--list1中的内容:" + list1 + "-->");
        
        Cat mike = new Cat();
        mike.run();
        System.out.println(mike.name + "is running over
");
    }
}

Cat.java

public class Cat{
    Cat()
    {
        this.name = "wali";
        this.age = 2;
    }
    public void run()
    {
        System.out.println("run run run
");
    }
    public String name;
    public int age;
}

makefile

result : Hellocat.java Cat.java
    javac Hellocat.java
clean :
    rm -f Hellocat.class Cat.class

执行的时候还得输入java Hellocat,这个项目比较小无所谓,如果遇到大的项目,各种package,需要调整包目录,尤其是需要引入外部jar的,java运行命令需要指出-cp位置

2.比较大的项目,需要引入外部jar(netty4.1.25)

代码不方便展示,主要有两个主类,HelloWorldClient和HelloWorldServer

makefile:

SRCFILES := $(wildcard *.java)
CFLAGS := -cp /home/kourui/netty4125/netty-4.1.25.Final/jar/all-in-one/netty-all-4.1.25.Final.jar
result : $(SRCFILES)
    javac $(CFLAGS) HelloWorldServer.java ServerChannelInitializer.java ServerHandler.java
    javac $(CFLAGS) HelloWorldClient.java ClientChannelInitializer.java ClientHandler.java
clean :
    rm -f *.class

运行脚本:

startserver:(pwd可以忽略,当时是提示用的)

#!/bin/bash
#this script avaiable for starting server
pwd 
java -cp ..:/home/kourui/netty4125/netty-4.1.25.Final/jar/all-in-one/netty-all-4.1.25.Final.jar pkg.HelloWorldServer

startclient:

#!/bin/bash
#this script starts client
pwd
java -classpath /home/kourui/jmaketest/hellocs:/home/kourui/netty4125/netty-4.1.25.Final/jar/all-in-one/netty-all-4.1.25.Final.jar pkg.HelloWorldClient

这样运行时直接通过命令:

./startserver

./startclient

就方便了许多

原文地址:https://www.cnblogs.com/CreatorKou/p/9180935.html