gpt4 book ai didi

java - 如何找到正确的 *.class 文件来运行 Java 应用程序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:41 24 4
gpt4 key购买 nike

考虑一个场景,我得到了一个我一无所知的 Java 项目,我必须编译并运行它

我想要一些解决方案,使我能够尽可能快地编译和运行任何程序而无需对项目一无所知

我尝试了什么:

为此,我使用以下过程来编译程序。

# compile *.java files into *.class files
javac -d . -encoding UTF-8 *.java

要运行我正在使用以下命令的程序,但它需要方法 main 所在的包和类。我不知道。

java -Dfile.encoding=utf-8 package.class

我发现可以使用 loop 和 javap 来检查它,所以我写了一个简单的 shell 脚本来自动编译程序,找到 main 方法所在的包和类是并运行它:

containsMain()
{
if javap -public $1 | fgrep 'public static void main(' > /dev/null; then
echo $1 | sed 's/^.\///' | cut -f 1 -d '.' | tr / .
fi
}

for classfile in */*.class; do
runclass=$(containsMain $classfile);
if [ "$runclass" ]; then
break
fi
done

java -Dfile.encoding=utf-8 $runclass

我发现了什么问题:

这按预期工作,但 javap 非常检查每个文件需要 1.2 秒。所以在最坏的情况下,它必须遍历所有文件以找到可能需要很长时间的方法 main。

另一个解决方案?

我想写一些正则表达式来在*.java文件中搜索方法main解析它所在的类和包。这并不像看起来那么容易,因为 ma​​in 方法可以用多种方式编写(修饰符)。它可以写在注释、字符串等中。甚至可以文件中有多个类

但如果这是一个正确的解决方案,我有点害怕,我想知道在我开始做这样的事情之前没有其他办法。

感谢任何建议:)

最佳答案

如果您可以将 java 应用程序打包到 jar 中,那么很容易从 Manifest 文件中找到主类。

    JarFile j = new JarFile(new File("jarfile.jar"));
String mainClassName = j.getManifest().getMainAttributes().getValue("Main-Class");

关于java - 如何找到正确的 *.class 文件来运行 Java 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40547157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com