【Java】发布程序

准备源码
// Animal.java
public abstract class Animal{
    public void eat(){
        System.out.println("Animal eating");
    }
}
// Dog.java
public class Dog extends Animal{
    public void bark(){
        System.out.println("Dog barking");
    }
}
// Cat.java
public class Cat extends Animal{
    public void meow(){
        System.out.println("Cat meowing");
    }
}
// Helloworld.java
import java.util.*;

public class Helloworld{
    public static void main(String[] args){
        new Helloworld().go();
    }
    public void go(){
        ArrayList<Animal> animals = new ArrayList<Animal>();
        animals.add(new Dog());
        animals.add(new Cat());
        animals.add(new Dog());
        takeAnimals(animals);

        ArrayList<Dog> dogs = new ArrayList<Dog>();
        dogs.add(new Dog());
        dogs.add(new Dog());
        dogs.add(new Dog());
        takeAnimals(dogs);

    }
    public void takeAnimals(ArrayList<? extends Animal> animals){
        for(Animal animal:animals){
            animal.eat();
        }
    }
}
编译

java -d ../classes *.java,要求编译器将编译得到的文件输出至 classes目录。

运行

在classes目录下执行javac Helloworld,运行程序。
在这里插入图片描述

创建JAR

JAR(Java ARchive),创建JAR包,分两步。

  1. 在classes目录下创建manifest.txt
    manifest文件告诉Java虚拟机,哪个类中含有main()这个方法。
Main-Class: Helloworld

注意哈Main-Class:Helloworld之间有一个空格,Helloword之后需要换行。

  1. jar -cvmf manifest.txt Helloworld.jar *.class,执行jar命令来创建带有所有类文件及manifest的JAR。
    在这里插入图片描述

我们不妨来看看生成的Helloworld.jar里到底有什么。
jar -tf Helloworld.jar,tf(Table File),条列出JAR中的内容。
咦,里面并不包含manifest.txt,但META-INF(META-INFormation)目录里有一个MANIFEST.MF文件。
在这里插入图片描述
jar -xf Helloworld.jar,xf(eXtract File),将JAR内容解压至当前目录,来看看MANIFEST.MF里面有啥。
在这里插入图片描述
可以看到,虽然manifest.txt文件本身没有被带入JAR中,但其内容(哪个类中包含 main()这个方法)放进了真正的manifest,也就是MANI-INF/MANIFEST.MF里。

执行JAR

java -jar Helloworld.jar,执行JAR包。
Java虚拟机能够从JAR中载入类,并调用类中的main()方法。
在这里插入图片描述

为防止类名称冲突,把类包进包;
为防止包命名冲突,则反向使用域名作包名,比如域名是cctv.com,则包名为com.cctv

把类包进包
准备源码
// Helloworld.java
package com.cctv;
public class Helloworld{
    public static void main(String[] args){
        System.out.println("This is a demo");
    }
}
编译

javac -d ..classes com/cctv/*.java,要求编译器将编译得到的文件输出至classes目录。

执行

在classes目录下,执行java com.cctv.Helloworld,运行程序。
在这里插入图片描述

创建JAR

创建JAR,分两步。

  • 第一步:在classes目录下创建manifest.txt
    manifest文件告诉Java虚拟机哪个类中含有main()这个方法。
Main-Class: com.cctv.Helloworld

  • 第二步:jar -cvmf manifest.txt Helloworld.jar com,执行jar命令来生成带有所有类及manifest的JAR。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值