【发布时间】:2019-08-18 01:06:37
【问题描述】:
我找不到一种方法来添加 classpathDirectory 的所有 Subdirectories 的所有 libraries /strong> 无需提及每个子文件夹 [...]
例如,假设我有那种目录层次结构:
aplication_Folder:
⎿ App.jar
external_libraries:
⎿ folder1:
⎿ File_1.1.jar
⎿ File_1.2.jar
⎿ folder2:
⎿ File_2.1.jar
⎿ File_2.2.jar
⎿ File_2.3.jar
...
我怎样才能运行我的应用程序 (App.jar) 而不是像这里一样选择每个子文件夹:
java -cp "./App.jar;./external_libraries/folder1/*; ./external_libraries/folder2/*;" app.App
以类似这一行的方式:
java -cp "./App.jar;./external_libraries/**/*;" app.App
.
[更新] 解决的种类:
现在我使用该代码(有一些小问题,例如,它没有得到名称在“文件夹 3”和子...子文件夹之间有空格的子文件夹):
@echo off
set CLASSPATH=./App.jar;
for /f %%i in ('dir .\external_libraries\/b') DO (
call :append ./external_libraries/%%i/*
)
java app.App
goto :eof
:append
set CLASSPATH=%CLASSPATH%%1;
在 CLASSPATH 中填充:
./App.jar;./external_libraries/folder1/*;./external_libraries/folder2/*;..."
比如,可以这样使用:
java app.App
.
像我这样的新手的额外信息:
您确实不需要使用 CLASSPATH 来运行应用程序,如下所示:
java -cp "%CLASSPATH%" app.App
因为当您已经设置了 CLASSPATH 的变量内容时,java 会自动读取它(只需确保变量的名称实际上是 'CLASSPATH' 而不是其他任何内容)请参阅 cmets 了解更多信息为什么 [...]
.
结束:
任何回复都将不胜感激。 提前致谢, 乔治。
【问题讨论】:
-
我认为你不容易;为什么需要?您显然已经在编写批处理脚本来启动 jar...我只需设置
CLASSPATH变量并使用它。set "CLASSPATH=./App.jar;./external_libraries/folder1/*;./external_libraries/folder2/*"然后java app.App-java将搜索CLASSPATH。 -
另外,请注意
"在我的set命令中的位置是正确的。 Windows 与其他一切都不同 - 它将是export CLASSPATH="./App.jar:./external_libraries/folder1/*:./external_libraries/folder2/*" -
@ElliottFrisch 我以那种奇怪的方式需要它,因为我的应用程序使用“joor”包,这意味着我在运行时编译代码并且该代码很可能需要使用一些外部库,这些库实际上将在子文件夹中(为了更好的组织)
-
java -cp "%CLASSPATH%" app.App应该只是java app.App... 正如我多次提到的,一旦你设置了CLASSPATH,你就不再需要同时指定-cp和-cp %CLASSPATH%永远不会必要的。 -
一旦你这样做了,应该解决命令行限制问题。
标签: java directory classpath wildcard executable-jar