VIP创新项目1课程总结2021-2022学年第1学期(2)

简介: 文章目录VIP创新项目1课程总结2021-2022学年第1学期1. Java基础1.1 Java代码是如何执行的1.2Java打包案例1.带package的jar包——直接输出hello

(3)创建Hello.java,并编译

在 F:\Example_Project\jar包内含有jar包 目录下创建com.Hello.java,Hello中调用了Student

package com;
import edu.hncj.vip.Student;
class Hello{
     public static void main(String[] agrs){
         //System.out.println("hello");
     Student.speak();
     }
}

编译Hello.java文件,javac -d . -encoding UTF-8 com/Hello.java


F:\Example_Project\jar包内含有jar包>javac -d . -encoding UTF-8 com/Hello.java

生成hello.jar包,jar -cvf hello.jar com\ lib\

F:\Example_Project\jar包内含有jar包>jar -cvf hello.jar com\ lib\
已添加清单
正在添加: com/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: com/Hello.class(输入 = 310) (输出 = 237)(压缩了 23%)
正在添加: com/Hello.java(输入 = 175) (输出 = 138)(压缩了 21%)
正在添加: lib/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: lib/student.jar(输入 = 1179) (输出 = 790)(压缩了 32%)

(4)运行hello.jar,java -cp hello.jar com.Hello

F:\Example_Project\jar包内含有jar包>java -cp hello.jar com.Hello
Exception in thread "main" java.lang.NoClassDefFoundError: edu/hncj/vip/Student
        at com.Hello.main(Hello.java:6)
Caused by: java.lang.ClassNotFoundException: edu.hncj.vip.Student
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

修改hello.jar中的MANIFEST.MF文件

Manifest-Version: 1.0
Created-By: 1.8.0_181 (Oracle Corporation)
Class-Path: lib/student.jar

再次运行java -cp hello.jar com.Hello即可

6.读取jar外的配置文件

(1)在F:\Example_Project\读取jar外的文件 目录中创建Hello.java

Hello.java文件

import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;
class Hello{
    public static void main(String[] args) throws Exception{
        Hello hello = new Hello();
        InputStream is = new FileInputStream("jarconf.txt");
        print(is);
    }
    /**
     * 读取文件,输出里面的内容,通用方法
     */
    public static void print(InputStream inputStream) throws Exception {
        InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");
        BufferedReader br = new BufferedReader(reader);
        String s = "";
        while ((s = br.readLine()) != null)
            System.out.println(s);
        inputStream.close();
    }
}

(2)同级目录下创建jarconf.txt文本文件,内容如下:


calssname=vip
desc=这是一个外部配置文件

(3)编译并打包java文件 :

编译Hello.java文件


javac -encoding UTF-8 Hello.java

打包hello.jar文件 :


jar -cvf hello.jar Hello.class

修改META-INF\MANIFEST.MF文件添加

Manifest-Version: 1.0
Created-By: 1.8.0_181 (Oracle Corporation)
Main-Class: Hello

执行jar:java -jar hello.jar


完整代码如下:

# 编译Hello.java文件为class文件
F:\Example_Project\读取jar内的文 件>javac -encoding UTF-8 Hello.java
# 生成jar包,
F:\Example_Project\读取jar外的文 件>jar -cvf hello.jar Hello.class
已添加清单
正在添加: Hello.class(输入 = 1008) (输出 = 594)(压缩了 41%)
# 修改hello.jar中的META-INF\MANIFEST.MF
# 执行jar
F:\Example_Project\读取jar外的文 件>java -jar hello.jar
calssname=vip
desc=这是一个外部配置文件
此时的目录结构
F:\Example_Project\读取jar外的文 件>tree . /f /a
卷 工作 的文件夹 PATH 列表
卷序列号为 00000001 5296:88B3
F:\EXAMPLE_PROJECT\读取JAR外的文 件
|   Hello.class
|   hello.jar
|   Hello.java
|   jarconf.txt
|
\---META-INF
        MANIFEST.MF

7.读取jar内的配置文件

(1)在F:\Example_Project\读取jar内的文件中创建Hello.java

Hello.java文件

import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Hello{
    public static void main(String[] args) throws Exception{
        Hello hello = new Hello();
        InputStream is = hello.getClass().getResourceAsStream("jarconf.txt");
        print(is);
    }
    /**
     * 读取文件,输出里面的内容,通用方法
     */
    public static void print(InputStream inputStream) throws Exception {
        InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");
        BufferedReader br = new BufferedReader(reader);
        String s = "";
        while ((s = br.readLine()) != null)
            System.out.println(s);
        inputStream.close();
    }
}

同级目录下创建jarconf.txt文本文件,内容如下:

calssname=vip
desc=这是一个内部配置文件

(2)编译并打成jar包

编译java文件 :

javac -encoding UTF-8 Hello.java

打包class文件 :

jar -cvfm hello.jar META-INF\MANIFEST.MF .

执行jar:

java -jar hello.jar

(3)完整过程如下:

# 编译Hello.java文件为class文件
F:\Example_Project\读取jar内的文件>javac -encoding UTF-8 Hello.java
# 生成jar包,同时制定META-INF\MANIFEST.MF
F:\Example_Project\读取jar内的文件>jar -cvfm hello.jar META-INF\MANIFEST.MF .
已添加清单
正在添加: Hello.class(输入 = 1109) (输出 = 637)(压缩了 42%)
正在添加: Hello.java(输入 = 755) (输出 = 385)(压缩了 49%)
正在添加: jarconf.txt(输入 = 50) (输出 = 55)(压缩了 -10%)
正在忽略条目META-INF/
正在忽略条目META-INF/MANIFEST.MF
# 执行hello.jar
F:\Example_Project\读取jar内的文 件>java -jar hello.jar
calssname=vip
desc=这是一个内部配置文件

2.Maven专题

2.1Maven简介

Maven是一种构建工具(打包项目)、依赖管理工具(资源依赖管理工具:主要用于集成资源)、项目信息聚合工具。

2.2Maven安装与常用配置

(1)安装过程

最简安装:

选择版本
下载解压
配置MAVEN_HOME环境变量
通过mvn -version确定下版本

这种安装没有修改setting.xml,会导致Maven下载的依赖位于C盘,并且默认从中央仓库下载,可能网速慢一些,这时可修改如下配置:

打开D:\安装目录\maven\conf\settings.xml文件,查找修改如下配置:

<!-- 修改本地仓库位置 -->
<localRepository>d:/apache/maven/maven-repo</localRepository>
<!-- 修改镜像地址 -->
<mirrors>
<!-- 给定仓库的下载镜像。 -->
<mirror>
    <!-- 该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
  <id>nexus-aliyun</id>
  <!-- 被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。 -->
  <mirrorOf>*,!jeecg,!jeecg-snapshots,!getui-nexus</mirrorOf>
  <!-- 镜像名称 -->
  <name>Nexus aliyun</name>
  <!-- 该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror> 
</mirrors>
<repositories>
  <!--包含需要连接到远程仓库的信息 -->
  <repository>
    <!--远程仓库唯一标识 -->
    <id>codehausSnapshots</id>
    <!--远程仓库名称 -->
    <name>Codehaus Snapshots</name>
    <!--如何处理远程仓库里发布版本的下载 -->
    <releases>
      <!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 -->
      <enabled>false</enabled>
      <!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),或者never(从不)。 -->
      <updatePolicy>always</updatePolicy>
      <!--当Maven验证构件校验文件失败时该怎么做-ignore(忽略),fail(失败),或者warn(警告)。 -->
      <checksumPolicy>warn</checksumPolicy>
    </releases>
    <!--如何处理远程仓库里快照版本的下载。有了releases和snapshots这两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的策略。例如,可能有人会决定只为开发目的开启对快照版本下载的支持。参见repositories/repository/releases元素 -->
    <snapshots>
      <enabled />
      <updatePolicy />
      <checksumPolicy />
    </snapshots>
    <!--远程仓库URL,按protocol://hostname/path形式 -->
    <url>http://snapshots.maven.codehaus.org/maven2</url>
    <!--用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。 -->
    <layout>default</layout>
  </repository>
</repositories>

2.3Maven工程简介

1.创建Maven工程

我们可以通过在命令行创建Maven工程,也可以通过IDEA创建Maven工程。打开命令行窗口,跳转到 D:\maven 目录,执行以下 mvn 命令。

mvn archetype:generate -DgroupId=edu.hncj -DartifactId=helloMaven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

参数说明:

DgroupId: 项目组 ID,通常为组织名或公司网址的反写。
DartifactId: 项目名。
DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart 用于快速创建一个简单的 Maven 项目。
DinteractiveMode: 是否使用交互模式。

需要注意的是,每个Maven工程都需要有一个唯一的定位坐标,即上述的GAV(groupId: 项目组 ID,DartifactId: 项目名, Version 唯一发行版本号)

2.Maven工程目录

工程结构:约定优于配置

约定优于配置(Convention Over Configuration)是 Maven 最核心的涉及理念之一 ,Maven对项目的目录结构、测试用例命名方式等内容都做了规定,凡是使用 Maven 管理的项目都必须遵守这些规则。

Maven 项目构建过程中,会自动创建默认项目结构,开发人员仅需要在相应目录结构下放置相应的文件即可。

例如,下表显示了项目源代码文件,资源文件和其他配置在 Maven 项目中的默认位置。

  文件        目录                
  Java 源代码  src/main/java     
  资源文件      src/main/resources
  测试源代码     src/test/java     
  测试资源文件    src/test/resources
  打包输出文件    target            
  编译输出文件    target/classes    

2.4Maven常用命令

1、mvn compile 编译,将Java 源程序编译成 class 字节码文件。
2、mvn test 测试,并生成测试报告
3、mvn clean 将以前编译得到的旧的 class 字节码文件删除
4、mvn pakage 打包,动态 web工程打 war包,Java工程打 jar 包。
5、mvn install 将项目生成 jar 包放在仓库中,以便别的模块调用
相关文章
|
机器学习/深度学习 人工智能 安全
IT专业报考指南:选择正确的学校和课程
随着高考的技术,男怕入错行,女怕嫁错郎,专业的选择也是至关重要的,当准备报考IT专业时,选择适合自己的学校和课程是至关重要的一步。随着信息技术的快速发展和应用范围的不断扩大,IT行业的就业前景变得更加广阔。然而,在众多学校和课程中做出明智的选择并不容易。这就是为什么一个全面的报考指南对于帮助你确定正确的学校和课程至关重要。
102 0
|
开发框架 前端开发 数据库
学生为学校教研室开发技能大赛评分系统
学生为学校教研室开发技能大赛评分系统
141 0
学生为学校教研室开发技能大赛评分系统
|
Dubbo Java 应用服务中间件
VIP创新项目1课程总结2021-2022学年第1学期(3)
文章目录 VIP创新项目1课程总结2021-2022学年第1学期 1. Java基础 1.1 Java代码是如何执行的 1.2Java打包案例 1.带package的jar包——直接输出hello
VIP创新项目1课程总结2021-2022学年第1学期(3)
|
前端开发 Java 编译器
VIP创新项目1课程总结2021-2022学年第1学期(1)
文章目录 VIP创新项目1课程总结2021-2022学年第1学期 1. Java基础 1.1 Java代码是如何执行的 1.2Java打包案例 1.带package的jar包——直接输出hello
VIP创新项目1课程总结2021-2022学年第1学期(1)
|
存储 SQL 分布式计算
Hadoop大数据技术课程总结2021-2022学年第1学期(上)
文章目录 Hadoop大数据技术课程总结 1.大数据概述 1.1大数据时代的4V 1.2大数据时代的三次浪潮
Hadoop大数据技术课程总结2021-2022学年第1学期(上)
|
SQL 存储 分布式计算
Hadoop大数据技术课程总结2021-2022学年第1学期(下)
文章目录 Hadoop大数据技术课程总结 1.大数据概述 1.1大数据时代的4V 1.2大数据时代的三次浪潮
Hadoop大数据技术课程总结2021-2022学年第1学期(下)
|
SQL 分布式计算 资源调度
Hadoop大数据技术课程总结2021-2022学年第1学期(中)
文章目录 Hadoop大数据技术课程总结 1.大数据概述 1.1大数据时代的4V 1.2大数据时代的三次浪潮
Hadoop大数据技术课程总结2021-2022学年第1学期(中)
|
Java Unix 网络安全
VIP创新项目1课程总结2021-2022学年第1学期(4)
文章目录 VIP创新项目1课程总结2021-2022学年第1学期 1. Java基础 1.1 Java代码是如何执行的 1.2Java打包案例 1.带package的jar包——直接输出hello
|
开发框架 架构师 前端开发
用SSM为学校教研室开发技能大赛评分系统
教师比赛系统总共分为三个阶段 第一个阶段是:教研室比赛阶段(同一个教研室的老师比赛),同一学院下多个教研室分别选取该教研室分数高的数人晋级到第二阶段:学院比赛。 第二个阶段是:学院比赛阶段:从第一阶段晋级过来的老师中选取分数最高的数名代表学院参加第三阶段(总决赛)比赛 第三个阶段是:总决赛:从第二阶段晋级来的选手比赛,排名,选出冠军、亚军、季军。
150 0
用SSM为学校教研室开发技能大赛评分系统