Java学习笔记
安装
安装JDK、
设置环境变量:
JAVA_HOME = D:\Android\Java\jdk1.8.0_25
CLASSPATH = .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
开源网站:www.sourceforge.net
Shift + Alt + s :可以调出重构界面,可以生成实体类
安装TomCat
CATALINA_HOME = 路径
默认访问地址:http://localhost:8080
Java导入普通Web项目
Project Facets:Dynamic - Java - JavaScript
Deployment Assembly:WebRoot
Maven使用
新建项目:mvn archetype:generate
groupid:项目标识(com.chenxy.demo)
artifactId:项目名称(maven_demo)
pom.xml:定义项目基础模型
打包: mvn package 会生成jar包。生成在target文件夹里有jar包
执行jar包:java -cp .\mvndemo-1.0-SNAPSHOT.jar com.chenxy.App
Eclipse设置Maven存储库:Windows->Preferences->Maven->Installations添加Maven指向。Maven->User Settings 选择Maven->conf->setting.xml
设置Maven-JDK:Windows->Preferences->Java->Installed ->Execution。选择
安装Eclipse插件
Help->Eclipse Marketplace -> 输入Maven -> 安装Maven Intergration for Eclipse
设置Maven仓库地址
Windows->Preferences->Maven->Installations->Add选择地址
Windows->Preferences->Maven->User Setting->Add选择地址
引入Maven项目
import -> Maven -> Existing Maven Project
新建项目
New -> Maven -> Maven Project -> Next -> Filter选择maven.archetype-quickstart
打包项目
Maven Build -> Goals输入package
数据库连接池
思想:自己维护一些列数据库链接,需要使用时直接使用其中一个,用完了复用不用销毁
目前常见技术是:proxool、DBCP、C3PO
proxool是一种JAVA数据库链接技术,sourceforge下的一个开源项目,提供一个健壮、易用的连接池,提供监控功能,方便易用,便于发现泄露的情况
Maven
Apache Maven是一个软件项目管理和理解工具。基于项目对象模型的概念,Maven可以生成一个中心信息管理项目的构建,报告和文档。
安装
下载Maven后,添加环境变量即可
运行
运行Maven的语法如下
mvn [options] [<goal(s)>] [<phase(s)>]
所有可用选项都记录在您可以访问的内置帮助中
mvn -h
构建Maven项目的典型调用使用Maven生命周期阶段,打包完成后就可以直接调用了
mvn package
mvn package && java -jar target/demo-0.0.1-SNAPSHOT.jar
告诉Maven构建所有模块,并检查所有集成测试是否成功。
只需要创建包并将其安装在本地存储库中,即可从其他项目中重复使用
mvn verify
当不使用项目时,以及在其他一些用例中,可能希望调用由Maven的一部分实现的特定任务,这称为插件的目标
mvn archetype:generate
或
mvn checkstyle:check
配置插件指南
Maven中,有构建和报告插件
构建期间将执行构建插件,然后在<build>元素中配置它们。
报告插件将在站点生成期间执行,并且应在<reporting>元素中配置。
所有插件都必需信息:groupId,artifactId,version
建议始终定义构建使用的每个插件版本,以保证构建的可重现性。推荐做法是在每个构建插件的build中指定它们。对于报告插件,应该在reporting中指定每个版本
通用配置
使用<executions>
常用于在参与构建生命周期的某些阶段的配置。
如果目标具有默认阶段绑定,则它将在该阶段执行。如果没有绑定多任何生命周期阶段,那么它就不会在构建生命周期中执行。
如果有多个绑定到不同阶段的执行,则对于指示的每一个阶段执行一次。


<project> ... <build> <plugins> <plugin> <artifactId>maven-myquery-plugin</artifactId> <version>1.0</version> <executions> <execution> <id>execution1</id> <phase>test</phase> <configuration> <url>http://www.foo.com/query</url> <timeout>10</timeout> <options> <option>one</option> <option>two</option> <option>three</option> </options> </configuration> <goals> <goal>query</goal> </goals> </execution> <execution> <id>execution2</id> <configuration> <url>http://www.bar.com/query</url> <timeout>15</timeout> <options> <option>four</option> <option>five</option> <option>six</option> </options> </configuration> <goals> <goal>query</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ... </project>
使用<dependencies>
配置Build插件的依赖项,通常使用更新的依赖项版本。整个项目所需要的jar包
例如:Maven Antrun插件版本1.2使用Ant版本1.65,如果想在运行此插件时使用最新的Ant版本,则需要添加<dependencies>元素


<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.2</version> ... <dependencies> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.7.1</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant-launcher</artifactId> <version>1.7.1</version> </dependency> </dependencies> </plugin> </plugins> </build> ... </project>
使用<inherited>
默认情况下,插件配置应该传播到子POM,因此要中断继承,可以使用inherited标记


<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.2</version> <inherited>false</inherited> ... </plugin> </plugins> </build> ... </project>
创建项目
如果需要在某个地方创建项目,需要创建一个目录了并在该目录中启动一个sheel。执行下面的命令
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
首次安装Maven,会有点慢因为会更新jar包和其他文件到本地存储库中。
POM
pom.xml的文件是Maven中项目的配置核心。它是一个单一的配置文件,包含以您希望的方式构建项目所需的大部分信息。POM是巨大的,其复杂度很高,但没有必要了解所有
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mvndemo.app</groupId> <artifactId>maven-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>maven-app</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
project:所有Maven pom.xml文件中的顶级元素。
modelVersion:元素指示此POM使用的对象模型的版本。
groupId:元素指示创建项目的组织或组的唯一标识符。关键标识符之一,通常基于组织的完全限定域名
artifactld:元素指示此项目生成的唯一基本名称。项目的主要生成是JAR文件。
version:生成项目的版本
packaging:指项目主要使用的包的类型(例如JAR、WAR等)还可以指示要在构建过程中使用的特定的生命周期
name:项目显示名称,通常用于Maven生成的文档中
url:项目站点位置,通常用于Maven生成的文档中
description:项目的基本描述,通常用于Maven生成的文档中
完整描述参考:https://maven.apache.org/ref/3.5.4/maven-model/maven.html
打包项目
mvn package
构建生命周期的阶段,Maven将执行序列中每个阶段
- 验证
- 产生来源
- 流程源
- 生成资源
- 流程资源
- 编译
打包完成后可以使用java命令进行测试
java -cp target/maven-app-1.0-SNAPSHOT.jar com.mvndemo.app.App
Maven阶段
默认生命周期阶段
- validate: 验证项目是否正确并且所有必要的信息都可用
- compile:编译项目的源代码
- test:使用合适的单元测试框架测试编译的源代码
- package:获取已编译的代码并将其打包为可分发的格式,例如JAR
- integration-test:将程序包处理并部署到可以运行集成测试的环境中
- verify:运行任何检查以验证包是否有效并符合质量标准
- install:将软件包安装到本地存储库
- deploy:在集成或发布环境中完成,将最终包赋值到远程存储库
- clean:清楚先前构建创建的工作
- site:为该项目生成站点文档
阶段实际上映射到基本目标。每个阶段执行的具体目标取决于项目的包装类型
mvn clean dependency:copy-dependencies package
此命令将清理项目,复制依赖项并打包项目
mvn clean compile
清理输出目录target/
mvn site
生成信息站点
编译应用程序
mvn compile 编译Maven项目
第一次执行命令时,需要下载所有插件和依赖项。再次执行,不需要下载。
编译后的类放在target/class中。
运行单元测试
mvn test 运行
mvn test-compile 编译不运行
SNAPSHOT版本
pom.xml文件中version标记的后缀:-SNAPSHOT。该值指的是沿着一个发展分支的最新代码,并且不保证该代码是稳定的或不变的。发布版本中没有这个后缀都是不变的。
也就是开发版本的意思
添加JAR包到资源
通过使用标准的Maven约定,可以简单的将资源放在目录结构中封装JAR包
my-app
|-- pom.xml
`-- src
|-- main
| |-- java
| | `-- com
| | `-- mycompany
| | `-- app
| | `-- App.java
| `-- resources
| `-- META-INF
| `-- application.properties
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
上面示例中我们添加了目录${basedir}/src/main/resources,将要包装的任何资源放入JAR包中。Maven采用的简单规则是:${basedir}/src/main/resources目录下的任何目录或文件都打包在JAR中,其结构与JAR基础相同。
文件结构示例中,我们在该目录中有一个带有application.properties文件的META-INF目录。
|-- META-INF
| |-- MANIFEST.MF
| |-- application.properties
| `-- maven
| `-- com.mycompany.app
| `-- my-app
| |-- pom.properties
| `-- pom.xml
`-- com
`-- mycompany
`-- app
`-- App.class
application.properties文件位于META-INF目录中。还会注意到其他一些文件,如META-INF/MAINFEST.MF以及pom.xml和pom.properties文件。这些标准在Maven中生成JAR的标准。
可以创建自己的清单,但如果不这样做,Maven将生成默认的清单。
在POM文件上操作需要使用一些Maven实用程序,但可以使用标准的Java API来使用这些属性
#Generated by Maven
#Tue Oct 04 15:43:21 GMT-05:00 2005
version=1.0-SNAPSHOT
groupId=com.mycompany.app
artifactId=my-app
将资源添加到单元测试的类路径中,将遵循与JAR添加资源相同的模式,除了放置资源的目录是${basedir}/src/main/resources。此时将拥有一个项目目录结构
my-app
|-- pom.xml
`-- src
|-- main
| |-- java
| | `-- com
| | `-- mycompany
| | `-- app
| | `-- App.java
| `-- resources
| `-- META-INF
| |-- application.properties
`-- test
|-- java
| `-- com
| `-- mycompany
| `-- app
| `-- AppTest.java
`-- resources
`-- test.properties
单元测试中,可以使用下面所示的简单代码片段来访问测试所需的资源
InputStream is = getClass().getResourceAsStream( "/test.properties" );
过滤资源文件
资源文件需要包含只能在构建时提供的值。使用语法${<property name>}将包含值的属性引用到资源文件中。该属性可以是pom.xml中定义的值之一,用户settings.xml中定义的值,外部属性文件中定义的属性或系统属性。
在复制时让Maven过滤资源,给pom.xml中的资源目录设置 filtering 为true
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
使用外部依赖项
pom中 dependencies部分列出了我们项目构建所需的所有外部依赖项。比如下面代码
<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>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> </project>
对于每个外部依赖项,至少需要4个内容:groupId,artifactid,version,scope。
groupId和artifactId,version需要与项目给出的相同。scope元素指示项目如何使用该依赖项,可以是compile,test,runtime之类的值。
Maven会在构建项目时引用依赖关系,查找本地存储库以查找所有依赖项。所以可以将项目安装到本地存储库。然后另一个项目就可以通过依赖关系添加到pom.xml来引用该jar包
<dependency> <groupId>com.mycompany.app</