小编Hal*_*ian的帖子

在不直接调用`java`的情况下运行JAR文件

我正在部署一个用Java编写的命令行工具,它接受命令行参数.我把它打包成一个JAR文件,因为它有一个单个文件很方便.

问题是要运行它,你必须先打电话java -jar (filename) (args),这是非常烦人的.

我目前的方式是有一个简单的bash脚本启动它,但这不太理想.

无论如何(在Linux,Ubuntu Server中)是否要生成一个自己调用Java VM的JAR文件?我找了一个shebang,但找不到一个(当然这是有道理的,因为它是编译代码).

这就是我想要做的:myprogram.jar arg1 -arg2而不是这个:java -jar myprogram.jar arg1 -arg2

谢谢,
Brian

java linux command-line

22
推荐指数
2
解决办法
8058
查看次数

找到Perl内存泄漏

已解决,请参阅编辑2

你好,

我一直在编写一个Perl程序来处理本地(专有)程序的自动升级(对于我工作的公司).

基本上,它通过cron运行,不幸的是有内存泄漏(或类似的东西).问题是泄漏只发生在我不看的时候(也就是说当通过cron运行时,而不是通过命令行).

我的代码不包含任何循环(或其他)引用,因此常用的工具不会帮助我(Devel::Cycle,Devel::Peek).

我怎样才能找出内核杀死内存的内存是多少

基本上,代码SFTP进入服务器(使用```sftp ...```),调用OpenSSL来验证文件,然后在需要更多文件时更多SFTP并安装它们(解压它们).

在第一次SFTP会议之前我已经看到了延迟(约15秒),但它从来没有使用太多的内存来杀死(在我面前).

如果我不能解决这个问题,我需要用不同的语言重写,这将花费宝贵的时间.

编辑:内核打印出以下消息,这使我相信它是内存泄漏:

[100023.123] Out of memory: kill process 9568 (update.pl) score 325406 or a child
[100023.123] Killed Process 9568 (update.pl)
Run Code Online (Sandbox Code Playgroud)

我不相信这是cron的问题,因为在通过命令行运行它时会停止(有时约为15秒).此外,没有使用环境变量(至少通过我所写的内容,可能是潜在的事情吗?)

编辑2:我自己找到了这个问题,在mobrule的下面评论的帮助下(回答这个问题).事实证明,脚本每天只从用户的crontab(非root用户)调用一次,并且(非root权限)导致特殊的无限循环情况.

对不起伙计们,我觉得以前没有找到这个有点傻,但谢谢.

mobrule,如果你提交你的评论作为答案,我会接受它,因为它导致我发现问题.

结束编辑

谢谢,Brian

PS我可以发布小代码片段,但不是由于公司政策而发布的全部内容.

perl memory-leaks

7
推荐指数
2
解决办法
3551
查看次数

JNI调用API - NoClassDefFoundError(C/Java)

我试图让JNI沾沾自喜,因为我在C中有一个需要访问单个Java库函数的应用程序(没有C等价库).我编写了一个非常简单的测试程序,用于从C加载Java VM并调用静态函数并获取返回值.

不幸的是,我无法让课程正确加载.虽然它可能归结为它,但我认为我的ClassPath是正确的:当我java在同一目录中使用具有相同ClassPath 的命令时,该类加载并执行完美.

环境:
Ubuntu 8.04服务器
Java JRE和SDK 1.6
gcc

我现在的工作目录总是如此/home/me/project.

这是我运行java命令(java -Djava.class.path=/home/me/project/ -verbose my.ClassABC)时得到的:

[Loaded ...] (many loads)
[Loaded my.ClassABC from file:/home/me/project/]
Hello test
[Loaded java.lang.Shutdown from shared objects file]
[Loaded java.lang.Shutdown$Lock from shared objects file]
Run Code Online (Sandbox Code Playgroud)

这是我运行C程序时得到的结果(./myClassABC):

[Loaded ...]
[Loaded my.ClassABC from file:/home/me/project/]
Exception in thread "main" java.lang.NoClassDefFoundError: my.ClassABC
Failed to get class
Run Code Online (Sandbox Code Playgroud)

这是我的gcc命令行:

gcc -o myClassABC myClassABC.c -I/usr/lib/jvm/java-6-sun-1.6.0.16/include/ -I/usr/lib/jvm/java-6-sun-1.6.0.16/include/linux -L/usr/lib/jvm/java-6-sun-1.6.0.16/jre/lib/i386/server/ -ljvm

我的C代码(myClassABC.c):

int main(int argc,char …
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface noclassdeffounderror

5
推荐指数
1
解决办法
6095
查看次数

重新完成与工作相同的编程工作

我是一家公司的合作社,我的任务是修补Roumen Petrov的OpenSSH w/x509证书补丁(http://www.roumenpetrov.info/openssh/)以包含他想要的列表中的一个功能:通配符杰出的名字.在他的网站上,他说他很乐意接受补丁.

完成后,如果有可能向公众发布补丁,我会让我的经理恳求上级.不幸的是,没有任何东西来自它,高层人士忘记了这个要求.

OpenSSH和w/x509补丁代码是BSD许可证,因此我们没有法律要求发布我们的更改.然而,作为开源的狂热用户并且最终能够做出贡献,我想帮助彼得罗夫先生付出努力.我的公司也有一个好处:补丁上游,我们不必在上游补丁版本之间维护它.

我是公司的雇员(不是承包商),因此我的工作是公司的财产,因此我不能在未经他们批准的情况下发布(不是我会想到的).

我想知道我是否在自己的时间重现我的更改,而不查看或引用在工作中生成的代码,我是否可以发布该补丁.

注意:我无法在任何地方找到我的雇佣合同的副本,因此我将尝试获取它的副本,但在此之前我无法回答有关它的任何具体问题.

注2:我发现你的人不是律师.(你是谁打电话给'你们这些人?'!)

open-source patch contract

2
推荐指数
1
解决办法
161
查看次数

检测Java类是否可加载

我有两个程序:一个CLI程序和一个GUI.GUI是CLI的前端,也是另一个程序的GUI.

我正在导入CLI的类并在GUI中扩展它们以向类添加GUI元素,一切都很棒.

但现在我想拆分我目前嵌入GUI的CLI(作为一个包含的JAR).JAR位于一个固定的位置(/opt/program/prog.jar),该应用程序只能在Linux上使用,因此我意识到这打破了传统的Java思想.

我已经在Manifest文件中编辑了ClassPath以反映这一变化,并且它工作正常.但是,当我删除该文件时,GUI无法加载,因为无法加载该类.

有没有办法尝试加载一个类,如果它不起作用,那么做一些其他的?本质上,我试图捕获ClassNotFound异常,但还没有运气.

java class dynamic classloader

0
推荐指数
1
解决办法
1108
查看次数