如果工作目录为/home/user/myApp
并且运行了命令jar -cvf app.war *
,则会创建具有适当结构的Web存档。但是,如果不是使用*
来指定文件,而是通过运行jar -cvf app.war /home/user/myApp/*
在命令中使用完整路径,则所有父目录也将包含在归档中。
换句话说,jar -cvf app.war *
正确生成以下结构:
|
- META-INF
|
- WEB-INF
而jar -cvf app.war /home/user/myApp/*
产生这种结构:
|
- home
|
- user
|
- myApp
|
- WEB-INF
|
- META-INF
这是一个错误吗?我想不出任何其他以这种方式行事的命令。这是用JDK 1.6测试的。
答案 0 :(得分:1)
*
是用于glob expansion的Bash(和其他shell)中的特殊字符
Bash将带有globbing的参数扩展为与glob匹配的参数列表。命令中的jar正在接收基于globs的扩展路径列表,而不是扩展globs本身。给定两组不同的参数,它的行为完全相同。
# Glob
$ ls *
bar baz foo
# Not using Globbing
$ ls foo bar baz
bar baz foo
# Glob
$ ls /Users/will/temp/*
/Users/will/temp/bar /Users/will/temp/baz /Users/will/temp/foo
# Not using Globbing
$ ls /Users/will/temp/foo /Users/will/temp/bar /Users/will/temp/baz
/Users/will/temp/bar /Users/will/temp/baz /Users/will/temp/foo
答案 1 :(得分:0)
*
是一个glob表达式,在执行jar命令之前由shell 扩展。 jar命令永远不会看到*
。