我有一个git存储库,当推送到特定分支时,该存储库将.java文件下拉到生产服务器。 (正在工作)我正在使用openJDK软件包运行Debian 9。 (jdk 1.8.0)
我决定在服务器上编译新的.java文件,然后执行它们。我的问题是,在将-cp arg指定为“ lib / *。jar”时,在编译过程中我得到:错误包jar.example.class不存在import jar.example.class;
对于从另一个.lib文件引用的任何信息的引用,依此类推。
重要: 我得到的最接近的命令是此命令,它不产生任何输出,但不编译整个项目。
例如: / server / bin / com / ruse / net / packet / impl /中的.class文件比/ server / src / com /中相应的ItemActionPacketListener.java文件旧。诡计/ net / packet / impl /
这是文件夹结构的图像:
作为参考,这是我一直用来运行服务器的命令(有效)
我尝试以不同的方式提供-cp或-classpath参数,但是,javac似乎在编译期间无法引用.jar文件。
以下是我尝试过的各种javac命令:
javac -classpath“ lib / *。jar” -d“ bin /”“ src / com / ruse / GameServer.java”
javac -sourcepath /home/rsps/server/src/.java -classpath classes: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文件,但是实际结果都是以下内容的变化:
导致:
符号:类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 / dialogue / DialogueManager.java:6:错误:包com.google.gson不存在
导入com.google.gson.Gson;
^
答案 0 :(得分:2)
一个不同的非回答:您正在谈论一个现实世界的项目和需求。
在现实世界中,您无需手动调用javac。相反,您使用诸如maven或gralde之类的构建系统。您定义一个包含所需库的项目结构。
然后让构建系统完成所有令人讨厌的细节。 除此之外,还意味着:您需要花费精力来创建自己的缺陷构建系统。
所以:不要重新发明轮子!这个问题已经解决,与这种成熟的构建系统相比,无论您想出什么,其功能都将变得更弱,而且更容易出错。
更新:当您的团队喜欢遵循效率较低的策略,而您又没有任何杠杆作用时,最好的选择就是以身作则。像:使用gradle创建一个有效的构建设置和项目定义。然后向您的队友展示该设置与Eclipse配合使用的效果如何。如何使用它来完全控制构建的内容,时间和方式。
人们通常对变化感到紧张,但是当您可以向他们展示有效解决方案的优势时,他们往往会敞开心!!