【问题标题】:How do i Add all Subfolders to Classpath [like -cp "lib\**\*"]我如何将所有子文件夹添加到类路径 [like -cp "lib\**\*"]
【发布时间】: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


【解决方案1】:

其实你有两种选择:

  • 自定义启动脚本,您可以在其中抓取所有必需的 jar 并填充类路径并将其传递给 -cp java 参数。详情见cmets

  • 自定义类加载器,您的应用程序开始在 cp 中只有一个(根)jar,然后主类确定根 jar 目录,然后遍历子目录并获取所有需要的 jar,然后使用抓取的 jar 创建新的类加载器并启动申请。

【讨论】:

  • 自定义启动脚本将是理想的! (只是我不知道怎么做)
  • 我没有适合您的情况的确切信息。但我相信你可以很容易地根据自己的需要调整这个:commandlinefu.com/commands/view/8077/…
猜你喜欢
  • 2019-12-22
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多