我有一个代码库,我想生成几个可交付的jar文件,每个文件都要从命令行运行,并访问代码库的某些功能.运行时,一些命令行参数是jar中的其他类,然后由反射创建.它工作得很好,但我必须指定类的非常长的完全限定路径,即使这些类在jar文件中.
我使用ant编译然后jar一系列目录.从最小的示例build.xml文件:
includeantruntime="false"
srcdir="${src}/utility" destdir="${classes}"
classpathref="classpath" />
destfile="${jars}/utility.jar"
basedir="${classes}"
includes="**/utility/**" />
includeantruntime="false"
srcdir="${src}/tokenizers"
destdir="${classes}"
classpathref="classpath" />
destfile="${jars}/tokenizers.jar"
basedir="${classes}"
includes="**/tokenizers/**" />
后来,我正在创建一个包含所有必需类的jar文件,并将运行一个命令,例如:
这一切都有效,并查看jar文件,所有类都在那里.
prompt > unzip -l TokenizeFile.jar
Archive: TokenizeFile.jar
Length Date Time Name
-------- ---- ---- ----
0 01-11-12 11:07 META-INF/
286 01-11-12 11:07 META-INF/MANIFEST.MF
0 01-11-12 10:16 dom/
0 01-11-12 10:16 dom/place/
0 01-11-12 10:16 dom/place/proj/
0 01-11-12 10:16 dom/place/proj/tokenizers/
1737 01-11-12 11:07 dom/place/proj/tokenizers/FileTokenizer.class
1411 01-11-12 11:07 dom/place/proj/tokenizers/PorterTokenizer.class
1754 01-11-12 11:07 dom/place/proj/tokenizers/TokenizeFile.class
992 01-11-12 11:07 dom/place/proj/tokenizers/Tokenizer.class
0 01-11-12 10:16 dom/place/proj/utility/
1106 01-11-12 11:07 dom/place/proj/utility/BoundedExecutor.class
3128 01-11-12 11:07 dom/place/proj/utility/Converter.class
1107 01-11-12 11:07 dom/place/proj/utility/ExceptionHandler.class
现在,为了运行代码,我做:
java -jar TokenizeFile.jar test.txt dom.place.proj.tokenizers.FileTokenizer dom.place.proj.tokenizers.PorterTokenizer
它的工作原理.好极了!但我希望我的客户端不必在命令行上为每个类指定完全限定名称 – 这是一个小例子,可能有很多项.在我的代码或构建过程中,我可以更改以允许这样做:
java -jar TokenizeFile.jar test.txt FileTokenizer PorterTokenizer
谢谢你的帮助.到目前为止,我正在从C / make过渡,就像蚂蚁和Java一样.