如何修复JAVAC无效标志错误



我正试图用javac编译一个shell脚本,它不断向我返回以下错误:

$ bash run_RGE.sh
javac: invalid flag: Element.java
Usage: javac <options> <source files>
use -help for a list of possible options
javac: invalid flag: RGE.java
Usage: javac <options> <source files>
use -help for a list of possible options
javac: invalid flag: -Xms1024m
Usage: javac <options> <source files>
use -help for a list of possible options
sleep: missing operand
Try "sleep --help" for more information.

我的shell脚本如下:

#!/bin/bash
# -*- coding: utf-8 -*-
export LIB=C:/home/b04280/Transfert/Libs/
CLASSPATH=$(echo "$LIB"/*.jar | tr ' ' ':')
export ficIn=C:/home/b04280/Transfert/rgeII.xlsx/
export repIn=C:/home/b04280/Transfert/rgeII/
export repOut=C:/home/b04280/Transfert/rgeIIcible/
javac -cp $CLASSPATH Element.java
javac -cp $CLASSPATH RGE.java
javac -Xms1024m -Xmx1024m -cp $CLASSPATH  RGE $ficIn $repIn $repOut > docx.txt
sleep 

我想知道这个错误是从哪里来的,我看了这里关于同一主题的其他问题,但他们的解决方案似乎不适合我的特定情况。

请帮忙吗?提前谢谢。

PS。我也有睡眠错误(我从批处理中"翻译"了这个脚本--gt;shell,"睡眠"是我找到的"暂停"的替代品(

我认为这应该更接近您的需求:

#!/bin/bash
# -*- coding: utf-8 -*-
lib=/home/b04280/Transfert/Libs
classpath=$(echo "$lib"/*.jar | tr ' ' ':')
fic_in=/home/b04280/Transfert/rgeII.xlsx/
rep_in=/home/b04280/Transfert/rgeII/
rep_out=/home/b04280/Transfert/rgeIIcible/
javac -cp "$classpath" Element.java
javac -cp "$classpath" RGE.java
java -Xms1024m -Xmx1024m -cp "$classpath" RGE "$fic_in" "$rep_in" "$rep_out" > docx.txt

特别是:

  • unix路径
  • 引用变量,以避免在其值包含空格时将其解析为多个参数
  • 在最后一个命令RGE是一个类名而不是一个文件路径,您可以指定内存设置,加上该命令会产生有用的输出;在我看来,它应该执行代码(java(,而不是编译它(javac(
  • 我不确定是否有必要,但从$LIB的值中删除尾部斜杠可以避免在$CLASSPATH中出现双斜杠,这可能会混淆java[c]
  • 删除了无用的exports(如果您调用了其他依赖于这些变量设置的bash脚本或二进制文件,那么它们会很有用,但您只是将它们作为参数传递(
  • 应用了命名约定(避免使用大写的变量,因为它们可能与环境变量冲突,使用snake_case而不是camelCase(

在您的上下文中,我不确定您是在执行java[c]二进制文件的linux版本还是windows版本。如果是windows,则需要用tr ' ' ';'替换tr ' ' ':'部分,因为windows上的类路径是分号分隔的,而不是冒号分隔的。

最新更新