我正在使用程序集和jar插件来部署我的应用程序.我也使用jar插件来帮助我使用清单文件生成类路径
<addClasspath>true</addClasspath>
Run Code Online (Sandbox Code Playgroud)
虽然这似乎有效,但是当我尝试执行jar(它有一个适当的主类指定)时会出现问题 - 它将无法找到一个实际上是传递依赖的库.所以我的项目A依赖于项目B,项目B依赖于jar C.程序集插件将正确压缩A,B和C,但jar插件在清单中不包含C,导致ClassNotFoundException.
我没有看到maven-jar-plugin中的任何选项让我指定需要传递依赖.
我是以正确的方式做到的吗?其他人设法将清单中的传递依赖项生成?也许我做错了什么或出了问题.任何帮助赞赏.
我爸爸离开了Java,因为现在结果发生了,有时我会忘记简单的事情并且过去常常表现得像个傻瓜.
要运行Simple Java程序,请在记事本中写下"Hello World",我该怎么办?
我知道命令javac"Filename.java"和java"Filename"分别从命令提示符运行它.
但是当我尝试这样做时,我得到了这样的信息:
"javac不被识别为内部或外部命令,可操作程序或批处理文件."
我无法编译文件.
我不知道我们需要做一些事情,比如设置类路径或者路径evnironment变量,但这正是我不记得了.
有人可以帮帮我吗?
谢谢,大卫
exec jar可能是一个非常常见的问题.我正在尝试创建并运行一个可执行jar,它让我疯狂.
我有几个类(包stmts),其中一个有一个main方法,一个简单的空构造函数和几个biz方法,这些构成了一个小eclipse项目的一部分.
我使用build.xml将这些和清单文件捆绑到jar(arc.jar)中.我的程序使用jdom库以及我的其他一个eclipse项目的引用,所以我在构建我的arc.jar时包括了jdom libray和其他商业库.
这是我写的Manifest.MF,有一个新的后续Main-Class
Manifest-Version: 1.2
Class-Path: jdom.jar other.jar
Main-class: uk.co.Art
Run Code Online (Sandbox Code Playgroud)
当我解压缩这个arc.jar时,它包含jdom.jar,other.jar,META-INF/Manifest.mf以及包含我的类的包.有趣的是,jar中的Manifest文件看起来像这样 -
Manifest-Version: 1.2
Created-By: 14.2-b01 (Sun Microsystems Inc.)
Main-class: uk.co.Art
Class-Path: jdom.jar other.jar
Run Code Online (Sandbox Code Playgroud)
ClassNotFoundException: uk.co.Art当Main类的值没有包时,我得到了ClassNotFoundException .使用包时错误更改为ClassNotFoundException: org.jdom.JDOMException.
所以只是为了测试目的,我尝试c:\为我的执行类和jar 提供完整路径,但仍然无法找到主类,错误输出ClassNotFoundException: uk.co.Art.
我似乎无法理解为什么.
我使用的命令行是 - java -jar Arc.jar
cmd提示符下的版本是 -
而eclipse安装的jre是jre6
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode)
你们有什么人建议的?
Alex的解决方案确实解决了本地执行的问题.
我还想到另一种方式(作为一个额外的选项)执行,在服务器上部署Arc.jar并在该机器上运行批处理,基本上设置java类路径,然后调用jar或直接调用类,无论它是哪种方式作品.But its only an option, not a preferred one though. …
他在那里,
现在已经卡住了一段时间.我试图做的事情归结为:
来源:
InputStream in = ClassLoader.getSystemResourceAsStream("json2/json.js");
Run Code Online (Sandbox Code Playgroud)
当我在tomcat中运行它时(in == null).
对于诊断,我即兴创作了以下内容:
File fu = new File(new URI(this.getClass().getClassLoader().getResource("").toString()));
String[] l = fu.list();
for (int i = 0; i < l.length; i++) {
System.out.println(i+"||"+l[i]);
}
Run Code Online (Sandbox Code Playgroud)
使用经典的java-class,它只生成我的main-class-file.在tomcat中它显示了"tomcat/lib"目录的内容.
有任何想法吗?我将不胜感激......
编辑
我忘记添加的一个细节(这真的磨齿):
SParser.class.getClassLoader().getParent().getResource("")
Run Code Online (Sandbox Code Playgroud)
想出了一个null-ptr.跆拳道?我没有访问特定的资源,仍然没有结果.
目前我正在尝试将我的coldfusion应用程序从我的测试服务器部署到生产服务器.应用程序在测试服务器上运行正常,但Coldfusion似乎无法在生产服务器上找到我的java类.
在测试服务器上查看我的coldfusion设置,我添加了一个java类路径条目,以便Coldfusion会(并且确实)找到我的判断应用程序中使用的java编译类:
d:\的Inetpub\wwwroot的\ extensionInterviewJudging\javaLib \构建
在生产服务器上,此路径设置为:
d:\班
我将我的java编译类从测试服务器复制/粘贴到生产服务器到上面的文件夹和与测试服务器相同的文件夹结构,但我的应用程序仍然没有找到java类.
是否存在我可能忘记从测试服务器复制到生产的Coldfusion服务器设置?为什么java类会在测试服务器上运行,而不是在生产服务器上单独安装?
在此先感谢您的帮助!
我知道有一千个java找不到一个类的问题,但是这一个看起来很奇怪而且不像标准类型.
这是我得到的例外:
Exception in thread "main" java.lang.NoClassDefFoundError: and
Caused by: java.lang.ClassNotFoundException: and
at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
at java.lang.ClassLoader.loadClass(ClassLoader.java:660)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
Run Code Online (Sandbox Code Playgroud)
我不知道最近会发生什么,因为它正在寻找一个名为'和'的类.首先,这是非大写的,并且应该是类名,其次它出现在标准包中,我并没有真正使用它.所以对我来说,看起来其他问题就是问题,但我无法弄明白.我有别人看着它而且他们也迷失了,所以如果有人可以提供一些见解,那么这将是值得赞赏的.
谢谢!
更新:这是我尝试运行启动时弹出的错误消息.

在阅读了关于动态类加载(即从磁盘加载.class文件)之后,我有点担心.
假设我有一个MyClass.class包含该类的文件a.b.c.MyClass.假设我现在决定将文件移动到C:\(我在Windows中的根文件夹),我想动态加载这个类.这有可能吗?根据我的理解,似乎MyClass"路径总是必须是形式的*a/b/c.MyClass.
因此,以下代码似乎不起作用:
URL[] urls = new URL[] { new File("C:\\").toURL() };
URLClassLoader classLoader = new URLClassLoader(urls);
Class<?> targetClass = classLoader.loadClass("a.b.c.MyClass");
Run Code Online (Sandbox Code Playgroud)
强迫我们将.class文件放在反映其完整内部名称的目录结构中是疯狂的,IMO.我错过了什么吗?
这个事实的一个可能的暗示是,如果我决定将几个.class文件复制到一个临时目录中,这样我就可以对它们执行一些非常棒的操作,我将不得不在同一个临时目录中复制它们的所有脏路径,这是尴尬,充其量.
我在一个文件夹中有一堆jar,为了简化类路径设置,我使用了新的(在Java 6中)类路径通配符语法:
CLASSPATH=":/$JARS/*"
这将获取$ JARS目录中的所有jar.到现在为止还挺好.
但是,在该目录中有一个jar我需要首先出现在类路径中,而通配符语法的文档声明jar的顺序是依赖于实现的,并且不能依赖它.
我想要做的是在通配符前添加我需要首先显示的一个jar:
CLASSPATH=":/$JARS/first.jar:/$JARS/*"
现在这意味着first.jar它将在类路径中出现两次,首先是显式引用,然后是通配符.这会给我带来什么问题吗?
是的,我知道我可以放入first.jar一个不同的目录来避免这个问题,但我只想说这样做会带来很多麻烦,我宁愿不必处理(我正在处理第三方产品) .
编辑:
我需要首先出现jar,因为它包含一些XML配置文件(作为资源加载),需要在另一个jar(由第三方供应商提供)中覆盖具有相同名称的XML文件.只是为了澄清,first.jar是我控制下唯一的罐子.目录中的所有其他jar都由第三方供应商提供.
我有一个具有以下目录结构的Eclipse项目:
MyProj/
src/main/java/
com.me.myproject.widgets
Widget.java
src/main/config
widget-config.xml
src/test/java
com.me.myproject.widgets
WidgetTest.java
src/test/config
widget-test-config.xml
Run Code Online (Sandbox Code Playgroud)
本Widget类读取它的配置(XML)从classpath中的任何地方文件中,并用它来配置它的属性.
WidgetTest当我右键单击该文件并转到时,我正试图在Eclipse中运行测试用例(所有用JUnit编写)Run As >> JUnit Test.我假设我必须实际运行它作为具有自己配置的类路径的自定义运行配置,但我不确定,因为我以前从未这样做过.
有没有人知道如何让自定义运行配置WidgetTest.java作为JUnit测试运行,并成功放在src/test/config/widget-test-config.xml类路径上?提前致谢!
请注意,这个问题不是关于如何从运行时类路径中读取资源,而是关于如何在Eclipse的JUnit Run Config类路径中获取它!
你能看到下面的代码有什么问题吗?这是一个bat文件,我试图在执行我的jar(jdbc oracle驱动程序)之前设置一些依赖类.
set CLASSPATH=lib\dbdriver.zip;%CLASSPATH%
java -jar sql2java.jar test.properties
pause
Run Code Online (Sandbox Code Playgroud)
我总是得到类未找到异常(该类在zip中我试图在类路径中添加).我甚至通过执行管理员来尝试这个,但无济于事
set CLASSPATH=lib\dbdriver.zip;%CLASSPATH%
java -jar %~dp0sql2java.jar %~dp0test.properties
pause
Run Code Online (Sandbox Code Playgroud)
该类位于zip文件(path\oracle\jdbc\OracleDriver)中,我正在尝试使用它来检索它
jdbc.driver = oracle.jdbc.driver.OracleDriver
classpath ×10
java ×9
jar ×3
assemblies ×1
batch-file ×1
class ×1
classloader ×1
coldfusion ×1
eclipse ×1
javac ×1
jsp ×1
junit ×1
manifest ×1
maven-2 ×1
maven-plugin ×1
reflection ×1
settings ×1
tomcat ×1
variables ×1