作为我的程序的一部分,我有一个连接管理器,它从客户端接收连接,然后给客户端一个端口号和一个用于连接的密码.在这一点上,管理器需要调用我必须处理此连接的jar文件,并使用一些参数,并继续,(忽略其他程序正在做的事情).
我的问题是执行jar文件.我查找了类似的问题,并尝试使用流程构建器并使用Runtime.exec.我移动了jar文件,并检查了它的权限.它只是拒绝从另一个java程序工作,但从命令行完美工作.这是我的一个测试运行的示例.
package test;
import java.io.*;
public class Main {
public static void main (String [] args ) throws IOException, ClassNotFoundException, InterruptedException {
Process p = Runtime.getRuntime().exec("java -jar \'/home/ryan/CytoscapeInterface.jar" +
"\' arg1 arg2");
//Process builder way
/*ProcessBuilder pb = new ProcessBuilder("/home/ryan/CytoscapeInterface.jar",
"-jar", "CytoscapeInterface.jar", "agr1", "arg2");
pb.redirectErrorStream();
Process p = pb.start();*/
BufferedInputStream bis = new BufferedInputStream(p.getErrorStream());
synchronized (p) { p.waitFor(); }
System.out.println(p.exitValue());//its 1 for runtime, 2 for process Builder
int read = bis.available();
//had a loop, found out I just needed …Run Code Online (Sandbox Code Playgroud) 我们按照预期在包中布置了一些通用代码.其中一些包是
handler, processor, util, registration等等
这里的常见意味着这些将在多个彼此无关的Java/Java EE项目中重复使用.
问题在于包装的分发.
每个包都包含不同的功能单元,但放在一起,它们是API.
我们应该将个别功能捆绑到JAR中,最后说8到10个罐子.例如:处理程序jar,注册jar等
要么
我们应该采用最小公分母方法,即5个强制包的基础构建到一个罐子里.任何其他人都需要该罐作为基础,并可以选择附加罐.
我们的构建系统是Ant + Ivy,这些依赖项将在编译和构建时解决.
似乎Apache ivy仅从http://mvnrepository.com/和其他几个地方下载工件,但所有的jar都在那里过时了.
所以我想为Ivy添加自定义存储库.我正在使用存储库Ivy RoundUp:http://code.google.com/p/ivyroundup/
这是我的配置,但收到错误:
build.xml文件:
<target name="update" depends="init-ivy" description="Download project dependencies">
<!-- edited for brevity -->
<ivy:settings file="ivysettings.xml" />
<ivy:retrieve pattern="war/WEB-INF/lib/[artifact]-[revision].[ext]" />
<!-- edited for brevity -->
</target>
Run Code Online (Sandbox Code Playgroud)
ivy.xml:
<ivy-module version="2.0">
<info organisation="org.apache" module="hello-ivy"/>
<dependencies>
<dependency org="org.springframework" name="spring" rev="3.0.6" conf="default->master"/>
</dependencies>
</ivy-module>
Run Code Online (Sandbox Code Playgroud)
ivysettings.xml:
<ivysettings>
<resolvers>
<packager name="roundup" buildRoot="${user.home}/.ivy2/packager/build" resourceCache="${user.home}/.ivy2/packager/cache">
<ivy pattern="http://ivyroundup.googlecode.com/svn/trunk/repo/modules/[organisation]/[module]/[revision]/ivy.xml"/>
<artifact pattern="http://ivyroundup.googlecode.com/svn/trunk/repo/modules/[organisation]/[module]/[revision]/packager.xml"/>
</packager>
</resolvers>
</ivysettings>
Run Code Online (Sandbox Code Playgroud)
错误:
Buildfile: C:\Users\Jansu\workspace\HibernateSpring\build.xml
build:
deploywar:
[war] Building war: C:\Users\Jansu\workspace\HibernateSpring\hibernate.war
[copy] Copying 1 file to C:\apache-tomcat-7.0.20\webapps
download-ivy:
[get] Getting: …Run Code Online (Sandbox Code Playgroud) 根据我的一点点java知识程序应该在它抛出运行时异常后终止.
但是在我的应用程序抛出运行时异常后它没有终止,并且因为我在linux上执行它我必须使用ctrl + c来终止它,否则它只是不会终止.
我在windows sytem上创建jar并将其复制粘贴到linux中.
我也在我的应用程序中启用了日志记录.
更新: 我没有捕获任何异常没有使用多线程.
所以我制作了一些提供一些特定API功能的java文件.我想将它们导出为Jar文件,可以在类路径中导入,以便使用此文件的人可以使用它的功能.
现在,当我通过Eclipse导出它时,它包含jar中的所有源文件,任何人都可以复制我的代码.有什么方法可以隐藏源代码,以便可以使用API功能而无需查看这些java文件的实际源代码?
请建议是否可行.
谢谢,
目前,我正在使用LWUIT库为移动设备开发J2ME应用程序.我的项目的构建结果包括.jar文件和.jad文件.我想知道,有没有办法将这些文件统一到一个.jar文件中?为什么应该在单个(和简单的).jad文件中提及我的应用程序的某些属性而不是jar文件的METAINF/manifest.mf文件?这确实使部署过程更加困难.
有没有什么方法可以通过编程方式找到jar分叉的当前位置?假设我正在执行Jar D:/Jars/myjar.jar,那么我可以从代码中获取该路径吗?
@AljoshaBre我试过这个
try {
File file = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
System.out.println(file.getAbsolutePath());
} catch (Exception e1) {
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
投掷NPE.:(
但
System.out.println(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
Run Code Online (Sandbox Code Playgroud)
仅显示client.jar.不是绝对的道路.它在一个罐子里面.
我有一个Spring MVC应用程序,它有一个公共前端WAR,一个管理员前端WAR和一个共享服务JAR.我的两个前端项目依赖于各种Spring JAR,我的共享服务JAR也是如此.他们需要的Spring JAR列表相似但不同.此外,两个基于WAR的应用程序依赖于共享服务JAR.
在捆绑JAR或设置类路径方面,您将如何部署这组应用程序/ JAR?您是否将所有适当的Spring JAR和服务JAR包含在两个WAR文件中?你会把任何和所有共享的JAR放到类路径上吗?如果是这样,你会通过命令行参数将它们放在Tomcat(我正在使用的应用服务器)的类路径上,或者你只是将类路径添加到系统类路径中?您是否会因开发和生产方案而有所不同?
作为参考,我正在使用Maven,它已将所有内容打包到WAR文件中,但我不确定这是否是最佳实践方法.
更新:作为参考,我发现这个页面非常有用:http://www.mulesoft.com/tomcat-classpath
谢谢,
詹姆士.
我试图从exchanges.jar文件加载类文件(没有实现任何公共接口)并将其存储在arraylist中以前,我从目录中加载了.class文件(实现了一个公共接口)
package edu.uh.cs.assign2;
import java.io.File;
import java.util.ArrayList;
import edu.uh.cs.iexchangeservices.IExchange;
public class ExchangeManager {
private ArrayList<IExchange> exchangeList = new ArrayList<IExchange>();
public ArrayList<IExchange> findClasses() throws Exception {
File classDirectoryPath = new File(Thread.currentThread()
.getContextClassLoader()
.getResource("exchangeservices".replace('.', '/')).getFile());
return loadExchangeClasses(classDirectoryPath);
}
public ArrayList<IExchange> loadExchangeClasses(File classDirectoryPath)
throws Exception {
if (!classDirectoryPath.exists())
throw new LoadExchangesException("path not found");
String[] exchangeClasses = classDirectoryPath.list();
for (String exchangeClass : exchangeClasses) {
if (exchangeClass.endsWith(".class")) {
Object object = (IExchange) Class.forName(
"exchangeservices"
+ '.'
+ exchangeClass.substring(0,
exchangeClass.length() - 6))
.newInstance();
if (object instanceof …Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习Java(大约一周前),最近几天我用Slick2D构建了一个小游戏.无论如何,每当我从eclipse导出JAR并使用'java blahblahblah.jar'运行它时,我会收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: /Users/andy/Desktop/game/jar
Caused by: java.lang.ClassNotFoundException: .Users.andy.Desktop.game.jar
Run Code Online (Sandbox Code Playgroud)
一切都被勾选出来,LWJGL和Slick2D罐子都在lib文件夹中,我尝试过FatJar.我看过互联网,似乎无法找到任何有效的解决方案.
有帮助吗?