java 6 有通配符 , 即使不是java 6 也可以根据 shell的强大功能自动实现 批量
可以替代 ant 了 ,麻烦;;
我自己的案例:
以前用ant :
后来直接用java
If using Java 6 or later, classpath wildcards are a part of the JVM.
java -cp "Test.jar;lib/*" my.package.MainClass
Key gotchas:
- Use quotes
- Use
*only, not*.jar
The above example and gotchas are from other answers on this page. (Thanks davorp et al & Wim Deblauwe)
From the Classpath document section entitled, Understanding class path wildcards:
Class path entries can contain the basename wildcard character
*, which is considered equivalent to specifying a list of all the files in the directory with the extension.jaror.JAR. For example, the class path entryfoo/*specifies all JAR files in the directory named foo. A classpath entry consisting simply of*expands to a list of all the jar files in the current directory.A class path entry that contains
*will not match class files. To match both classes and JAR files in a single directory foo, use eitherfoo;foo/*orfoo/*;foo. The order chosen determines whether the classes and resources infooare loaded before JAR files infoo, or vice versa.Subdirectories are not searched recursively. For example,
foo/*looks for JAR files only infoo, not infoo/bar,foo/baz, etc.The order in which the JAR files in a directory are enumerated in the expanded class path is not specified and may vary from platform to platform and even from moment to moment on the same machine. A well-constructed application should not depend upon any particular order. If a specific order is required then the JAR files can be enumerated explicitly in the class path.
Expansion of wildcards is done early, prior to the invocation of a program's main method, rather than late, during the class-loading process itself. Each element of the input class path containing a wildcard is replaced by the (possibly empty) sequence of elements generated by enumerating the JAR files in the named directory. For example, if the directory
foocontainsa.jar,b.jar, andc.jar, then the class pathfoo/*is expanded intofoo/a.jar;foo/b.jar;foo/c.jar, and that string would be the value of the system propertyjava.class.path.The
CLASSPATHenvironment variable is not treated any differently from the-classpath(or-cp) command-line option. That is, wildcards are honored in all these cases. However, class path wildcards are not honored in theClass-Path jar-manifestheader.
If you cannot use wildcards, bash allows the following syntax (where lib is the directory containing all the Java archive files):
java -cp $(echo lib/*.jar | tr ' ' ':')
(Note that using a classpath is incompatible with the -jar option. See also: Execute jar file with multiple classpath libraries from command prompt)
本文探讨了Java 6中引入的通配符功能,并提供了如何在类路径中使用这些通配符的具体示例。此外,还讨论了使用通配符时常见的陷阱,以及如何利用Bash脚本来实现类路径的自动批量设置。

281

被折叠的 条评论
为什么被折叠?



