0%

文章字数:65,阅读全文大约需要1分钟

问题描述

从java返回的boolean类型的flag直接用来if判断,结果flag是true却没有进入if语句。

分析

用typeof flag 发现接收到的是string类型

解决

做了个判断

1
target = res==="true"?true:res==true?true:false;

Boolean(target)竟然不行??


文章字数:540,阅读全文大约需要2分钟

介绍

VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。在JDK_HOME/bin(默认是C:\Program Files\Java\jdk1.6.0_13\bin)目录下面,有一个jvisualvm.exe文件,双击打开,从UI上来看,这个软件是基于NetBeans开发的了。
VisualVM 提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序或远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。

功能

主要有:监控、线程、Visual GC这些功能,还可以使用插件增加功能


文章字数:213,阅读全文大约需要1分钟

之前有一个文件转成base64的js操作,其中有一部分是文件的读取。以前没有看到过js的文件操作,这一次特地找了一个demo。原生的javascript好像只支持文件读取,文件的写入似乎不支持。

js读取选中的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var
fileInput = document.getElementById('test-image-file'),
info = document.getElementById('test-file-info'),
preview = document.getElementById('test-image-preview');
// 监听change事件:
fileInput.addEventListenser('change',function(){
//清除背景图片
preview.style.backgroundImage = '';
//检查文件是否选择
if (!fileInput.value) {
info.innerHTML = '没有选择文件';
return;
}
//获取File引用
var file = fileInput.files[0];
//获取file信息
info.innerHTML = `
文件: ${file.name}
大小: ${file.size}
修改: ${file.lastModifiedDate}
`;
if (file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
alert('不是有效的图片文件!');
return;
}
//读取文件
var reader = new FileReader();
reader.onload = function(e){
var
data = e.target.result;
preview.style.backgroundImage = 'url(' + data + ')';
};

//以dataURL的形式读取文件
reader.readAsDataURL(file);
});

文章字数:806,阅读全文大约需要3分钟

jvm分为三个主要的子系统:
(1)类加载系统 (2)运行时数据区 (3)执行引擎
数据加载进运行时数据区,执行引擎从数据区获取执行

一、类加载系统

处理动态类加载功能,当运行时首次引用一个类时,它加载、链接、初始化该类文件

1.加载

启动类加载器(BootStarp class Loader)、扩展类加载器(Extension class Loader)、应用程序类加载器(Application class Loader)三个组件完成此操作:

  • 启动类加载器- 父 -从启动类路径中加载类(rt.jar,就是java基本类,javaDoc中的所有),拥有最高优先级
  • 扩展类加载器- 子 -负责加载ext目录的类(jre\lib)
  • 应用程序类加载器- 孙 -加载应用程序级别类路径。

加载机制:

  • 全盘负责:类加载器加载一个类时,默认该类依赖和引用的其它类也由该加载器负责.
  • 双亲委派: 先让父类加载试图加载的Class依次递归,父类加载不了才自己加载。
  • 缓存机制:所有加载过的类都会被缓存,程序使用类时加载器先从缓存中寻找。所以修改Class后必须重启JVM。

用户类加载器=>应用程序类加载器=>扩展类加载器=>启动类加载器

双亲委派优点:1.防止重复加载 2.防止底层传入虚假的核心JavaAPI

2.链接

  • 校验-字节码校验器会校验生成的字节码是否正确,失败提示校验错误信息。
  • 准备-分配内存并初始化默认值给所有静态变量。
  • 解析-所有的符号内存引用被方法区(Method Area)的原始引用替代。

3.初始化

这是类加载的最后阶段,静态变量赋值,静态代码块被执行。

二、运行时数据区

之前的文章jmm(java内存模型)有讲到,不再赘述。

三、执行引擎

将数据区内的字节码逐段执行。

1.解释器

能快速解析字节码,但是对于重复的方法会每次都重新解析

2.即时编译器JIT(Just In Time Compiler)

为了解决解释器的缺点,当被判定为重复代码将使用JIT编译,并重复利用。

其它:

  • 中间代码生成器-生成中加代码
  • 代码优化器 -负责优化上面生成的代码
  • 目标代码生成器-生成既期待吗或本机代码
  • 探测器(Profiler)-负责寻找被多次调用的方法。

垃圾回收机制(GC)

之后另起一章讲述

JVM 参数

  • 堆:-Xms -Xmx(一般设置一样的值,否则内存抖动)
  • 线程:-Xss 线程堆栈调用深度
  • 新生代初始大小:–XX:NewSize–XX:MaxNewSize指定新生代初始大小和最大大小。
  • -XX:NewRatio 是年老代 新生代相对的比例
  • -XX:SurvivorRatio配置的是在新生代里面Eden和一个Servive的比例

文章字数:583,阅读全文大约需要2分钟

jwt介绍

传统用户登录后会使用session存储用户信息,session依靠cookie来记录sessionId,而移动端没有cookie
jwt本质上是一串字符串,包含头部、内容、签名三部分。头部可以存储加密方式等信息,内容可以是用户基本信息,签名是对前面两部分的签名,用来验证真伪。使用jwt后服务端无需保存用户状态,每次用户请求都需要带上jwt的字符串,以此表明身份。不依赖session的存储用户信息,更适合分布式及移动端

jwt结构

1
2
# base64的头部 + "." + base64的内容 + "." + 对于前面部分的签名
base64(headerJson).base64(payload).HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret);

Header

一般存储以下内容

1
2
3
4
{
"alg": "HS256",
"typ": "JWT"
}

payload

payload只经过base64,是可逆的,相当于明文。所以最好不要放置敏感信息

1
2
3
4
5
6
7
8
9
10
11
12
13
# 标准的jwt主体可以使用这七个默认字段
iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT
# 也可以自己定义
{
"name": "123",
"token": "zzzzdasd"
}

Signature

1
HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

签名算法主要有

  1. HMAC哈希消息验证码对称算法:HS256/HS384/HS512
  2. RSASSA非对称的RSA签名算法:RS256/RS384/RS512
  3. ECDSA非对称的椭圆曲线数据签名算法: ES256/ES384/ES512

java中使用

  • java-jwt
1
2
3
4
5
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.3</version>
</dependency>
  • 生成jwt

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 指定token过期时间为10天
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE, 10);
    // 生成
    String token = JWT.create()
    .withHeader(new HashMap())// header的内容
    .withClaim("key1", "value")// payload
    .withClaim("key2", "value")
    .withExpiresAt(calender.getTime())// 过期时间
    .sign(Algorithm.HMA256("pwd"));
  • 校验及获取内容

1
2
3
4
5
6
7
// 解析对象
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("pwd")).build();
// 校验及解析
DecodedJWT decodedJWT = jwtVerifier.verify(token);
// 之后就能获取其中的内容
Claim userId = decodedJWT.getClaim("key1");
Claim userName = decodedJWT.getClaim("key2");
  • 非对称加密签名
1
2
3
4
RSA rsa = new RSA("pwd", null);
RSAPrivateKey privateKey = (RSAPrivateKey) rsa.getPrivateKey();
// 然后传入签名
JWT.create().withClaim("k","v").sign(Algorithm.RSA256(null, privateKey));
  • 校验时
1
2
3
4
RSA rsa = new RSA(null, "pwd");
RSAPublicKey publicKey = (RSAPublicKey) rsa.getPublicKey();
JWTVerifier jwtVerifier = JWT.require(Algorithm.RSA256(publicKey, null)).build();
DecodedJWT decodedJWT = jwtVerifier.verify(token);

文章字数:265,阅读全文大约需要1分钟

loadClass

加载一个类,传入名字或位置

  1. 调用findLoadedClass(String)检测是否这个类已经被加载
  2. 没有被加载则调用父类的loadClass()方法,直到找到或者父类为空(说明是启动类加载器)
  3. 到了启动类加载器都没有就调用findClass(String)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized (getClassLoadingLock(name)) {
// First, check if the class has already been loaded
Class<?> c = findLoadedClass(name);
if (c == null) {
long t0 = System.nanoTime();
try {
if (parent != null) {
c = parent.loadClass(name, false);
} else {
c = findBootstrapClassOrNull(name);
}
} catch (ClassNotFoundException e) {
// ClassNotFoundException thrown if class not found
// from the non-null parent class loader
}

if (c == null) {
// If still not found, then invoke findClass in order
// to find the class.
long t1 = System.nanoTime();
c = findClass(name);

// this is the defining class loader; record the stats
sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
sun.misc.PerfCounter.getFindClasses().increment();
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
}

findClass

  1. 根据名称或位置加载.class字节码,然后使用defineClass
  2. 通常由子类去实现
    loadClass的源码可以看到,最后如果还是找不到类就会调用findClass。但是ClassLoaderfindClass是直接抛出异常,自定义类加载器需要实现此方法。
    1
    2
    3
    protected Class<?> findClass(String name) throws ClassNotFoundException {
    throw new ClassNotFoundException(name);
    }

definclass

  1. 把字节码转化为Class

文章字数:481,阅读全文大约需要1分钟
网上找的leetCode题目字符串转树和链表的工具,来自原文

一、工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.colin.tool;

import java.util.List;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;

/**
* LeetCode工具
*/
public class LeetCode {

public static class ListNode {
public int val;
public ListNode next;
public ListNode(int x) {
val = x;
}
}

public static class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x) {
val = x;
}
}

/**
* 生成连表
*
* @param str
* @return
*/
public static ListNode createList(String str){
if (str==null) return null;
String substring = str.substring(1, str.length() - 1);
if (substring.length()==0)return null;
String[] split = substring.split(",");
ListNode root = new ListNode(-1);
ListNode temp = root;
for (String s : split) {
ListNode next = new ListNode(Integer.parseInt(s));
temp.next = next;
temp = next;
}
return root.next;
}

/**
* 生成二叉树
*
* @param str
* @return
*/
public static TreeNode createTree(String str) {
if (str==null) return null;
String substring = str.substring(1, str.length() - 1);
if (substring.length()==0)return null;
String[] split = substring.split(",");
TreeNode root = split[0].equals("null")?null:new TreeNode(Integer.parseInt(split[0]));
Queue<TreeNode> queue = new LinkedBlockingQueue<>();
queue.add(root);
int index = 1;
while (!queue.isEmpty()){
TreeNode cur = queue.poll();
if (index<split.length){
cur.left = split[index].equals("null")?null:new TreeNode(Integer.parseInt(split[index]));
index++;
if (cur.left!=null){
queue.add(cur.left);
}
}else {break;}
if (index<split.length){
cur.right= split[index].equals("null")?null:new TreeNode(Integer.parseInt(split[index]));
index++;
if (cur.right!=null){
queue.add(cur.right);
}
}else {break;}
}
return root;
}

public static void show(List<TreeNode> nodes) {
nodes.forEach(node-> System.out.print(node.val + ","));
System.out.println();
}

/**
* 展示二叉树的结构
*
* @param root
*/
public static void show(TreeNode root) {
if (root == null) System.out.println("EMPTY!");
// 得到树的深度
int treeDepth = getTreeDepth(root);

// 最后一行的宽度为2的(n - 1)次方乘3,再加1
// 作为整个二维数组的宽度
int arrayHeight = treeDepth * 2 - 1;
int arrayWidth = (2 << (treeDepth - 2)) * 3 + 1;
// 用一个字符串数组来存储每个位置应显示的元素
String[][] res = new String[arrayHeight][arrayWidth];
// 对数组进行初始化,默认为一个空格
for (int i = 0; i < arrayHeight; i ++) {
for (int j = 0; j < arrayWidth; j ++) {
res[i][j] = " ";
}
}

// 从根节点开始,递归处理整个树
// res[0][(arrayWidth + 1)/ 2] = (char)(root.val + '0');
writeArray(root, 0, arrayWidth/ 2, res, treeDepth);

// 此时,已经将所有需要显示的元素储存到了二维数组中,将其拼接并打印即可
for (String[] line: res) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < line.length; i ++) {
sb.append(line[i]);
if (line[i].length() > 1 && i <= line.length - 1) {
i += line[i].length() > 4 ? 2: line[i].length() - 1;
}
}
System.out.println(sb.toString());
}
}

// 用于获得树的层数
public static int getTreeDepth(TreeNode root) {
return root == null ? 0 : (1 + Math.max(getTreeDepth(root.left), getTreeDepth(root.right)));
}


private static void writeArray(TreeNode currNode, int rowIndex, int columnIndex, String[][] res, int treeDepth) {
// 保证输入的树不为空
if (currNode == null) return;
// 先将当前节点保存到二维数组中
res[rowIndex][columnIndex] = String.valueOf(currNode.val);

// 计算当前位于树的第几层
int currLevel = ((rowIndex + 1) / 2);
// 若到了最后一层,则返回
if (currLevel == treeDepth) return;
// 计算当前行到下一行,每个元素之间的间隔(下一行的列索引与当前元素的列索引之间的间隔)
int gap = treeDepth - currLevel - 1;

// 对左儿子进行判断,若有左儿子,则记录相应的"/"与左儿子的值
if (currNode.left != null) {
res[rowIndex + 1][columnIndex - gap] = "/";
writeArray(currNode.left, rowIndex + 2, columnIndex - gap * 2, res, treeDepth);
}

// 对右儿子进行判断,若有右儿子,则记录相应的"\"与右儿子的值
if (currNode.right != null) {
res[rowIndex + 1][columnIndex + gap] = "\\";
writeArray(currNode.right, rowIndex + 2, columnIndex + gap * 2, res, treeDepth);
}
}
}

二、使用

1
2
3
4
5
// 引入TreeNode和ListNode
import com.colin.tool.LeetCode.*;

// 构造
TreeNode root = LeetCode.createTree("[1,null,2,null,3]");

文章字数:1233,阅读全文大约需要4分钟

linux命令格式为 命令 [-选项] [参数]

目录结构

文件名 全称 介绍
bin binaries 存放二进制可执行文件
sbin super user binaries 存放二进制可执行文件,root才能访问
etc etcetera 存放系统配置文件
usr unix shared resources 存放共享的系统资源
home - 存放用户文件的根目录
root - 超级管理员目录
dev devices 存放设备文件
lib library 存放根文件系统中程序运行需要的共享库和内核模块
mnt mount 系统管理员安装临时文件系统的安装点
boot - 存放用于系统引导时使用的各种文件
tmp temporary 用于存放各种临时文件
var variable 用于存放运行时需要改变数据的文件

文件及目录命令

操作 参数 示例 说明
cd cd / 切换目录
pwd pwd 显示当前工作目录的目录
touch touch test.txt 创建空文件
mkdir mkdir testDir 创建目录
- -p mkdir -p dir1/dir2/dir3 创建多级目录,父目录不存在情况下先生存父目录
cp cp 1.txt newDirectort 复制文件或目录到新地方
- -r cp -r dir1/ xxx 递归处理,目录及目录下文件一起拷贝到xxx
mv mv 文件1 文件2 将文件1重命名为文件2
mv mv 文件 目录 移动文件到目录
mv mv 源目录 目标目录 存在目标目录则移动,否则重命名
rm rm 1.txt 删除
- -r -f rm -rf dir1 r删除目录下的所有文件 f强制删除
rmdir rmdir dir1 删除空目录
> echo xxx > 1.txt 将前面的输出定向写入到文件,没有创建,有覆盖
>: echo xx >: 1.txt 写入,文件有内容覆盖
>> echo xx >> 1.txt 追加到文件,文件不存在创建
>>: echo xx >>: 1.txt 追加写入

文件内容命令

操作 参数 示例 说明
cat cat 1.txt 显示文件内容
more more 1.txt 分页显示内容,可前后翻页。空格向后,b?
less less 1.txt 方向键查看内容,加载速度快
head head 1.txt 查看文件开头,默认看十行
- - [num] head -20 1.txt 查看固定行数内容
tail tail 1.txt 查看文件结尾,默认十行
- - [num] tail -20 1.txt 查看结尾固定行数内容
- -f tail -f 1.txt 循环滚动读取文件,根据文件属性追踪
- -F tail -F 1.txt 循环滚动读取文件动态,文件文件名追踪
wc wc 1.txt 统计行数、字数、字符数
- -m wc -m 1.txt 字符数
- -w wc -w 1.txt 文本字数
- -l wc -l 1.txt 文本行数
scp 复制远程机器的文件

查找命令

操作 参数 示例 说明
find -name find dir -name 1.txt 在文件系统中查找文件
grep grep “aaa “ 1.txt 查找1.txt中的包含aaa的行
- grep zz *file 查找当前目录以file结尾的文件里有zz的行
- -r grep -r xxx /etc 递归的形式查找目录及目录的子目录下文件有xxx的行
- -v grep -v test *test 反向查找,查找不包含test的行
- -E -n grep -E -n “^w” 1.txt -E使用正则查看1.txt中w开头的行,-n显示行号
In In1.txt 1_bak.txt 建立连接文件
- -s In -s 1.txt 1_bak.txt 建立符号连接,软连接。

系统命令

操作 参数 示例 说明
top top 显示当前系统中耗电最多的进程
date date 显示系统时间
ps 配合参数使用
- -e ps -e 显示所有进程,环境变量
- -f ps -ef 全格式显示
- -a ps -a 显示所有用户的所有进程(包括其他用户)
- -u ps -au 按照用户名和启动时间显示进程
- -x ps -aux 显示无控制终端的进程
kill -15 kill -15 pid 正常退出pid程序
- -9 kill -9 pid 立即杀死进程
df df 显示文件系统磁盘空间状况
-h df -h
du 显示指定目录及子目录已使用磁盘空间总和
- -s du -s * 显示指定目录,
- -h du -sh * 友好显示
free free 显示当前内存和交换空间情况
ifconfig ifconfig 网卡网络配置,ip,网关等
- ifconfig eth0 192.168.1.1 临时修改系统ip(需要重启)
ping ping www.baidu.com 测试网络连通
hostname hostname 查看主机名
shutdown 关机,参数 -help
halt halt 关机,相当于shutdown -h
reboot reboot 重启,shutdown -r
sudo 暂时切换成root,ubuntu下一般是15分钟
su 切换成root,没时间限制

压缩解压缩

操作 参数 示例 说明
gzip gzip 1.txt 压缩文件或文件夹
- -d gzip -d 1.txt gz 解压文件
- -[num] gzip -9 1.txt 压缩速度,越快压缩比越小
tar 打包压缩

文件权限

-rwx rw- r–
所属用户权限 所属组权限 其它用户权限
- 普通文件 d目录 l链接文件

chmod 修改文件权限
chown 修改用户权限

vim

i写模式
esc键退出写模式
:命令行模式
:wq命令行模式下输入,保存退出


文章字数:428,阅读全文大约需要1分钟

回顾一下markdown命令
内容有:1.标题 2.字体 3.引用 4.分割线 5.图片 6.超链接 7.列表 8.表格 9.代码

1.标题

1
2
3
4

# 一级标题

## 二级标题

效果:

一级标题

二级标题

2. 字体

**加粗** 加粗

*斜体*斜体

***斜体加粗***斜体加粗

~~删除线~~ 删除线

3.引用

1
2
3
4

>一级引用

>>二级引用

一级引用

二级引用

4.分割线

三个以上--- 或者***

5.图片

```
1
2
3
4
5
6
7
8
9
10

# 6.超链接

` [超链接名](超链接地址"超链接title") title可不加 `

# 7.列表

1. 无序列表

` - 内容 + 内容 * 内容 三种都行 符号空格内容 `
  • xxx
  • xxx
    1
    2
    3
    4
    - xxx
    - xxx

    2. 有序列表
  1. xxx
  2. xxx
    1
    2
    3
    4

    # 8.表格

    > `---` 默认左对齐, `:---:`居中对齐,`---:`右对齐

表头|表头|表头

—|:—:|—:

内容|xxx|xxx

1
2

# 9.代码

单行代码
//以下是多行代码
三个` (```)

多行代码

多行代码

三个` (```)

1
`单行代码`

多行代码


---

文章字数:647,阅读全文大约需要2分钟

maven archetypemaven提供的模板工具包,可以帮助用户提供项目模板。

常用的模板

  1. cocoon-22-archetype-webapp: 有applicationContext.xmllog4j.xmlweb.xml三个

  2. maven-archetype-quickstart: 简单的java程序模板,有测试类和普通入口

  3. mavne-archetype-webapp: 简单的jsp项目模板,里面有web.xmlindex.jsp

41个模板

  1. appfuse-basic-jsf (创建一个基于Hibernate,Spring和JSF的Web应用程序的原型)
  2. appfuse-basic-spring (创建一个基于Hibernate,Spring和Spring MVC的Web应用程序的原型)
  3. appfuse-basic-struts (创建一个基于Hibernate,Spring和Struts 2的Web应用程序的原型)
  4. appfuse-basic-tapestry (创建一个基于Hibernate,Spring 和 Tapestry 4的Web应用程序的原型)
  5. appfuse-core(创建一个基于Hibernate,Spring 和 XFire的jar应用程序的原型)
  6. appfuse-modular-jsf(创建一个基于Hibernate,Spring和JSF的模块化应用原型)
  7. appfuse-modular-spring (创建一个基于Hibernate, Spring 和 Spring MVC 的模块化应用原型)
  8. appfuse-modular-struts (创建一个基于Hibernate, Spring 和 Struts 2 的模块化应用原型)
  9. appfuse-modular-tapestry (创建一个基于 Hibernate, Spring 和 Tapestry 4 的模块化应用原型)
  10. maven-archetype-j2ee-simple (一个简单的J2EE的Java应用程序)
  11. maven-archetype-marmalade-mojo (一个Maven的 插件开发项目 using marmalade)
  12. maven-archetype-mojo (一个Maven的Java插件开发项目)
  13. maven-archetype-portlet (一个简单的portlet应用程序)
  14. maven-archetype-profiles
  15. maven-archetype-quickstart
  16. maven-archetype-site-simple (简单的网站生成项目)
  17. maven-archetype-site (更复杂的网站项目)
  18. maven-archetype-webapp (一个简单的Java Web应用程序)
  19. jini-service-archetype (Archetype for Jini service project creation)
  20. softeu-archetype-seam (JSF+Facelets+Seam Archetype)
  21. softeu-archetype-seam-simple (JSF+Facelets+Seam (无残留) 原型)
  22. softeu-archetype-jsf (JSF+Facelets 原型)
  23. jpa-maven-archetype (JPA 应用程序)
  24. spring-osgi-bundle-archetype (Spring-OSGi 原型)
  25. confluence-plugin-archetype (Atlassian 聚合插件原型)
  26. jira-plugin-archetype (Atlassian JIRA 插件原型)
  27. maven-archetype-har (Hibernate 存档)
  28. maven-archetype-sar (JBoss 服务存档)
  29. wicket-archetype-quickstart (一个简单的Apache Wicket的项目)
  30. scala-archetype-simple (一个简单的scala的项目)
  31. lift-archetype-blank (一个 blank/empty liftweb 项目)
  32. lift-archetype-basic (基本(liftweb)项目)
  33. cocoon-22-archetype-block-plain ([http://cocoapacorg2/maven-plugins/])
  34. cocoon-22-archetype-block ([http://cocoapacorg2/maven-plugins/])
  35. cocoon-22-archetype-webapp ([http://cocoapacorg2/maven-plugins/])
  36. myfaces-archetype-helloworld (使用MyFaces的一个简单的原型)
  37. myfaces-archetype-helloworld-facelets (一个使用MyFaces和Facelets的简单原型)
  38. myfaces-archetype-trinidad (一个使用MyFaces和Trinidad的简单原型)
  39. myfaces-archetype-jsfcomponents (一种使用MyFaces创建定制JSF组件的简单的原型)
  40. gmaven-archetype-basic (Groovy的基本原型)
  41. gmaven-archetype-mojo (Groovy mojo 原型)