Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bash脚本编译和执行java_Java_Bash - Fatal编程技术网

从bash脚本编译和执行java

从bash脚本编译和执行java,java,bash,Java,Bash,我正在尝试使用bash脚本编译我的java代码。我还需要传入参数,这些参数来自同一目录中的另一个文件。我的脚本看起来像: #!/usr/bin/env bash MYID="$(cat $(pwd)/my.id)" eval javac src/main/java/foo/bar.java "$MYID" 但它认为我的论点是另一个用于编译的java文件,并给出了错误: Class names, 'abc123', are only accepted if annotation process

我正在尝试使用bash脚本编译我的java代码。我还需要传入参数,这些参数来自同一目录中的另一个文件。我的脚本看起来像:

#!/usr/bin/env bash

MYID="$(cat $(pwd)/my.id)"
eval javac src/main/java/foo/bar.java "$MYID"
但它认为我的论点是另一个用于编译的java文件,并给出了错误:

Class names, 'abc123', are only accepted if annotation processing is explicitly requested
p.S.abc123是my.id文件中我需要传递的唯一id

请帮我完成这项工作,我一整天都在寻找解决方案(

编辑:这是一个愚蠢的问题。
我刚刚意识到我在错误的地方传递了参数。我找到了答案。谢谢!

你做得不对。
javac
命令编译程序。就是这样。它不会生成源代码

根据您的评论,听起来您应该这样做:

javac foo/Bar.java
java foo.Bar $(cat my.id) > foo/Baz.java
javac foo/Baz.java
这假设
foo.Bar
是一种生成器程序,它知道如何生成java源代码


实际上,我希望您真正想要做的是某种源代码模板扩展。有更简单和/或更灵活的方法可以做到这一点,即编写定制的Java程序(例如,使用“m4”实用程序)

编译器应该如何处理ID?您可能想在启动程序时传递它?实际上您想做什么?使用javac--帮助了解要使用的选项。如果每次只编译
bar.java
,该脚本的效用是什么?它将基于此ID生成另一个java文件。之后我将用生成的java文件编译另一个类。什么将基于此id生成另一个文件?Javac不会生成源文件。也许您的bar类会生成源文件。在这种情况下,您不应该将参数传递给Javac,但您应该有第二行运行bar类并将参数传递给itlet me explain my code。我传递在我的一个类的id中,这有助于我创建另一个java类。我将生成的类用于我的主程序。是的,谢谢!我刚刚意识到我的问题有多愚蠢。哈哈