【问题标题】:java.lang.NoClassDefFoundError when calling the Java function from Powershell Script从 Powershell 脚本调用 Java 函数时出现 java.lang.NoClassDefFoundError
【发布时间】:2014-09-04 18:58:50
【问题描述】:

我正在尝试将实际运行 java 语句的 .bat 文件转换为 PowerShell 脚本,主要是因为 .bat 文件具有硬编码的用户/密码和

set /p password="Enter password: " %=%

没有在命令提示符下隐藏密码。

当我从 .bat 文件或直接从 dos 提示符运行该 java 命令以及从 .bat 文件运行该命令时,该 java 命令运行良好。

我确保所有环境变量都在批处理文件中设置。

我的问题在于以下几点:

当我从命令行或直接从命令提示符运行它时,java 工作正常,

当我尝试使用 cmd.exe /c 直接运行该行时,它不起作用,如果我从 powershell 调用 .bat 文件,它不起作用并给出以下错误。

cmd : java.lang.NoClassDefFoundError

我不明白...为什么我可以手动运行并且通过 PowerShell 脚本它不起作用?

这是我的 .BAT 文件,可以正常工作:

@rem ###################################
set IIQPATH=C:\IIQ\IIQ
set exportpath=C:\EXPORT
set /p userid="Enter ID: " %=%
set /p password="Enter password: " %=%
@rem ##################################
echo %exportpath%
set CLASSPATH=%CLASSPATH%;%IIQPATH%\WEB-INF\classes
set CLASSPATH=%CLASSPATH%;%IIQPATH%\WEB-INF\lib\identityiq.jar
set CLASSPATH=%CLASSPATH%;%IIQPATH%\WEB-INF\lib\sqljdbc4.jar
set CLASSPATH=%CLASSPATH%;./split

@rem Export the objects

java sailpoint.launch.Launcher console iiqBeans -u %userid% -p %password% -c "export -clean %exportpath%\Application.xml Application"

这是我的 PowerShell 代码

$iiquser = Read-Host 'Provide User for'$target2' environment'
$iiqpass = Read-Host 'Provide Password?' -AsSecureString
$actualdate=Get-Date -format MM_dd_yyyy
$iiquser
$iiqpass

Push-Location C:\EXPORT

$env:IIQPATH="C:\IIQ\IIQ"
$env:exportpath="C:\EXPORT"
Remove-Item env:CLASSPATH
$env:CLASSPATH="$env:CLASSPATH;$env:IIQPATH\WEB-INF\classes"
$env:CLASSPATH="$env:CLASSPATH;$env:IIQPATH\WEB-INF\lib\identityiq.jar`$time"
$env:CLASSPATH="$env:CLASSPATH;$env:IIQPATH\WEB-INF\lib\sqljdbc4.jar"
$env:CLASSPATH="$env:CLASSPATH;./split"

$commandline="java sailpoint.launch.Launcher console iiqBeans -u $iiquser -p $iiqpass -c "+[char]34+"export -clean $env:exportpath\Application.xml Application"+[char]34

$commandline

cmd /c $commandline

有什么提示吗?

======================== 快速更新...

我在 cmd windows 提示和 PS Cmd 提示中手动设置变量。

当我运行不带参数的 java 命令时,我得到以下结果

C:\>java sailpoint.launch.Launcher
Usage: sailpoint.launch.Launcher [ -d ] [<application> | <class>] <arguments>...

Applications:
  setup           Bootstrap configuration utility
  schema          Schema file generator
  upgrade         Perform data upgrades between releases
  patch           Perform data upgrades post release
  console         Administrative console
  encrypt         Administrative console
  integration     Integration console
  oim             OIM Integration console
  exportschema    Data Export console
  exportviews     View Export console
  keystore        Key Store console
  parse           XML file parser

但是当我尝试在 PS 命令行中运行它时,我得到了以下信息:

PS C:\> java sailpoint.launch.Launcher
Exception in thread "main" java.lang.NoClassDefFoundError: sailpoint/launch/Launcher
Caused by: java.lang.ClassNotFoundException: sailpoint.launch.Launcher
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: sailpoint.launch.Launcher.  Program will exit.

【问题讨论】:

  • 您是否尝试在调用命令之前显示 CLASSPATH 以确保其设置符合您的预期?
  • Hey Jim.. 是的.. 我做到了... PS 会话中的 CLASHPATH 与 DOS 提示符中的 CLASSPATH 值完全相同。

标签: java batch-file powershell cmd


【解决方案1】:

应该使用的命令是

java -cp .\identityiq.jar sailpoint.launch.Launcher  

-cp 选项负责在 Powershell 命令行中设置 CLASSPATH。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2015-04-13
    • 2019-08-04
    • 1970-01-01
    • 2016-08-27
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多