当前位置: 首页 > 知识库问答 >
问题:

如何在-cp参数中正确地为许多*.jar文件提供arg以便在UNIX上进行编译?

叶健柏
2023-03-14

我有一个git存储库,当对特定分支进行推送时,它将.Java文件下拉到生产服务器。(工作)我正在运行带有openJDK包的Debian9。(jdk 1.8.0)

我决定在服务器上编译新的.Java文件,然后执行它们。我的问题是,当将-cp参数指定为“lib/*.jar”时,在编译过程中我得到:错误包jar.example.class不存在import jar.example.class;

对从另一个.lib文件引用的任何信息进行引用,以此类推。

重要:我得到的最接近的命令是这个命令,它不产生输出,但不编译整个项目。

  • javac-classpath“bin:lib/*.jar”-d“bin/”“src/com/ruse/gameserver.java”

例如:在/server/bin/com/ruse/net/packet/impl/中,.class文件比/server/src/com/ruse/net/packet/impl/中相应的ItemActionPacketListener.java文件旧

  • 我正在/home/rsps/server目录中运行此命令。
  • .jar文件存在于/home/rsps/server/lib文件夹中。
  • .src文件存在于/home/rsps/server/src文件夹中。
  • .bin文件应输出到/home/rsps/server/bin文件夹中。
  • “Main”类是void Main,在src/com/ruse/gameserver.java中找到

作为参考,这里是我一直用来运行服务器的命令(它可以工作)

  • Java-server-xmx2148m-classpath bin:lib/*com.ruse.gameServer

我尝试过以不同的方式提供-cp或-classpath参数,但是,javac似乎无法在编译期间引用.jar文件。

下面是我尝试过的各种javac命令:

>

  • javac-classpath“lib/*.jar”-d“bin/”“src/com/ruse/gameserver.java”

    javac-sourcepath/home/rsps/server/src/.Java-classpath类:lib/.jar-d bin

    javac-classpath“lib/*.jar”-d“bin/”-sourcePath“src/”“src/com/ruse/gameserver.java”

    javac-cp“lib/:lib/*”-d“bin/”-sourcePath“src/”“src/com/ruse/gameServer.java”

    javac-cp.:/lib/*.jar:-d“bin/”“src/com/ruse/gameServer.java”

    我希望输出是新鲜的.class文件,但实际结果都是以下的变化:

    • javac-classpath“lib/*.jar”-d“bin/”“src/com/ruse/gameserver.java”

    结果如下:

    符号:类ChannelBuffer

    位置:类PacketBuilder

    src/com/ruse/world/world.java:11:错误:包com.google.common.util.concurrent不存在

    导入com.google.common.util.concurrent.ThreadFactoryBuilder;

                                       ^
    

    src/com/ruse/util/misc.java:26:错误:包org.jboss.netty.buffer不存在

    导入org.jboss.netty.buffer.ChannelBuffer;

                            ^
    

    src/com/ruse/util/misc.java:750:错误:找不到符号

       public static String readString(ChannelBuffer buffer) {
    
                                       ^
    

    符号:类ChannelBuffer

    地点:类杂项

    src/com/ruse/world/content/dialogueManager.java:6:错误:包com.google.gson不存在

    导入com.google.gson.gson;

                     ^
    
  • 共有1个答案

    马德宇
    2023-03-14

    一个明显的非答案:您正在谈论一个真实世界的项目和需求。

    在现实世界中,您不会手动调用javac。相反,您使用像maven或Gralde这样的构建系统。定义一个包含所需库的项目结构。

    然后让构建系统处理所有讨厌的细节。任何其他的东西都意味着:你花费了大量的精力来创建你自己的缺陷构建系统。

    所以:不要推倒重来!这个问题解决了,无论你想出什么,都不会像这样成熟的构建系统那样强大,更容易出错。

    更新:当你的团队更喜欢遵循效率较低的策略,而你又没有任何杠杆作用,那么最好的选择就是以身作则。比如:使用Gradle创建一个工作的构建设置和项目定义。然后向您的团队成员展示该设置在Eclipse中的工作效果。如何使用它来完全控制生成的内容,以及何时和如何生成。

    人们经常对变化感到紧张,但当你能向他们展示一个工作解决方案的优点时,他们往往是开放的!

     类似资料:
    • 我有一个包含子报表的报表模板; 在主报表中,我有一些参数也应该在子报表中可用。 主报表参数如下定义: 在子报表中,我用相同的名称定义了相同的参数: 我为子报表提供了主报表的参数,如下所示:\

    • 问题内容: 我有3个jar文件和一个依赖于这些jar文件的.java文件。如何使用命令提示符使用这些jar文件编译.java文件? 问题答案: 你可以使用“ -cp”选项将jar文件包含在“ javac”命令中。 除了“ -cp”,你还可以使用“ -classpath” 你可以在每次编译时通过正确设置环境变量“ CLASSPATH”来包含jar。环境变量将存储需要用于编译/执行任何java文件的j

    • 问题内容: 我正在搜索页面,您可以在其中输入搜索查询并将表单提交到。什么PHP函数是最好的,我应该使用它对搜索查询进行编码/解码? 问题答案: 对于URI查询,请使用;对于其他任何事情,请使用/。 和之间的区别是 根据 application/x-www-form-urlencoded编码(空格用编码),而 根据简单的 Percent-Encoding编码 (空格使用编码)。

    • 我试图做到的是,如果我用一个新窗口替换正在渲染的窗口,这可能是因为用户切换屏幕,或从全屏切换到窗口,或出于其他任何原因。 到目前为止,我的代码如下所示: “Context.h” “Context.cpp” "WindowManager. h" “WindowManager.cpp” “Main.cpp” 因此,当前版本的代码应该执行以下操作: 在主监视器上显示全屏窗口 在这个显示器上,显示一个“正

    • 问题内容: 我对使用Spring将对象注入到类中有疑问。我在项目中使用了以下代码: 然后通常在以下方法上使用它: 否则,我在Spring示例中发现了注入构造函数的情况: 所以两者都正确吗?还是每个都有其属性和用法? 问题答案: tl; dr-构造函数注入是执行DI的最佳方法 后者是正确的,并不是因为Spring或任何依赖注入容器,而是面向对象的类设计原则。 细节 应该设计一种类型,以便您只能根据其

    • 使用postgresql 9.5,查询显示错误,为什么? 我试着改变