我试图让一段代码与log4j一起工作.如果我通过junit测试(ant任务)运行它,我得到正确的日志输出,一切都很好.如果我从命令行运行代码,我得到这个:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout
at uk.co.bytemark.flexnbd.Main.main(Main.java:29)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout
Run Code Online (Sandbox Code Playgroud)
我尝试了以下两个类路径,但都没有帮助.错误仍然存在.
export CLASSPATH=/home/yann/java/apache-log4j-1.2.16/log4j-1.2.16.jar
export CLASSPATH=/home/yann/java/apache-log4j-1.2.16/
Run Code Online (Sandbox Code Playgroud)
即便如此
$ java -cp /home/yann/java/apache-log4j-1.2.16/log4j-1.2.16.jar -jar ./dist/lib/flexnbd-`date +%Y%m%d`.jar server ::1 12345 fileSystem
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout
at uk.co.bytemark.flexnbd.Main.main(Main.java:29)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 1 more
$ ls -ld /home/yann/java/apache-log4j-1.2.16/log4j-1.2.16.jar
476K -rw-r--r-- 1 yann yann 471K Mar 31 05:16 /home/yann/java/apache-log4j-1.2.16/log4j-1.2.16.jar
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
我有一段代码可以使用弹簧上下文
context = new ClassPathXmlApplicationContext("application-context.xml");
Run Code Online (Sandbox Code Playgroud)
该文件位于WAR的"WEB-INF/application-context.xml"内.在JBoss 4.2.3中,上面的代码工作正常.在JBoss 5.1中,经过实验,似乎希望文件位于"WEB-INF/classes/application-context.xml"中.将文件移到那里之后就可以了.
我也用google搜索了很多关于VFS如何与Spring的类路径混淆的引用.
我正在玩Rhino,我已经成功使用了stdlib中的Java类,但没有使用我编译的Java代码.
例如,这工作正常:
print(new java.util.Date());
Run Code Online (Sandbox Code Playgroud)
但是使用NanoHTTPD(单个.java文件,没有名称空间,相同的文件夹),我根本就没有运气:
js> new Packages.NanoHTTPD()
js: "<stdin>", line 4: uncaught JavaScript runtime exception: TypeError: [JavaPackage NanoHTTPD] is not a function, it is object.
at <stdin>:4
Run Code Online (Sandbox Code Playgroud)
我确信这很简单.我错过了什么?
编辑:我发布它是这样的:
$ CLASSPATH=. java -jar rhino.jar
Run Code Online (Sandbox Code Playgroud)
或这个:
$ java -classpath . -jar rhino.jar
Run Code Online (Sandbox Code Playgroud)
或者我将NanoHTTPD.java移动到文件夹"./nano"中,添加package nano;到文件顶部,编译它,然后替换为".".在上面的类路径分配中使用"nano".
无论我怎么做,从翻译中我看到:
js> java.lang.System.getProperty("java.class.path")
/Users/me/blah/rhino.jar
Run Code Online (Sandbox Code Playgroud) 所以我一直试图在几个小时内解决这个问题.我已经浏览了互联网,我已经搜索了StackOverflow,我问过一些同事(我是实习生)老实说,没有人能告诉我发生了什么!我把一个非常简单的例子放在一起向你展示我在做什么(即使用简单的例子我也得到错误)
我有两个.java文件.一个是Test.java另一个是testClass.java.
//testClass.java
package test;
public class testClass {
private int someMember=0;
public testClass(){
//kill me now
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有我的Test.java文件,其中包含我的main方法.(虽然在我真正的问题中我没有主方法 - 它是一个带doGet()方法的servlet )
//Test.java
package test;
public class Test {
public static void main(String[] args) {
testClass myTest = new testClass();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下内容进行编译(从Windows命令行,使用当前目录保存我的.java文件):
..java bin location..\javac testClass.java
Run Code Online (Sandbox Code Playgroud)
这非常正常,我在当前目录中获得了一个testClass.class文件.然后,我尝试使用以下内容编译Test.java文件(再次在工作目录中):
..java bin location..\javac -classpath . Test.java
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
Test.java:6: cannot find symbol
symbol : class testClass
location : class test.testClass
testClass myTest = new …Run Code Online (Sandbox Code Playgroud) 到目前为止,我只在程序中使用了标准库.我只是制作一个简单的控制台应用程序而且我没有使用任何IDE,只是简单的文本编辑器(因为我现在不需要任何更复杂的东西).
我不知道在哪里放下我已下载的jar文件,我也不知道如何正确调用它.我读过有关包含路径的内容吗?但我不确定我是否理解.
我只是有简单的文件夹结构,如下所示:
我试过这个:
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;
Run Code Online (Sandbox Code Playgroud)
但我知道它不存在.
我在包的包下创建属性文件 resources/common/configure/
然后我创建代码
Properties prop = new Properties();
try {
//load a properties file
prop.load(new FileInputStream("resources/common/configure/commonData.properties"));
//get the property value and print it out
System.out.println(prop.getProperty("id"));
} catch (IOException ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误
java.io.FileNotFoundException: (The system cannot find the path specified)
Run Code Online (Sandbox Code Playgroud)
请让我知道如何获得此属性文件.
我下载了一个带有.classpath的eclipse项目,该项目包含需要更新的类条目.
这究竟是做什么的?我可以在eclipse中更改.classpath的内容吗?
我User Libraries在eclipse中打开,希望它与.classpath具有相同的内容,但它没有任何内容.

我使用的程序:eclipse和mysql.
我在mysql中有一个数据库,我想在eclipse和mysql之间建立连接.
我在Eclipse中创建的项目中有一些文件夹.
我有主文件夹:testest ..我告诉你我在相关文件夹中的内容:
testest
..src
....testest
......testestservlet.java
..app engine sdk
..JRE system library
..referenced library
..war
..lib
....mysql-connector-java-5.1.22
Run Code Online (Sandbox Code Playgroud)
我更新了我的testestservlet.java:
package testest;
import java.io.IOException;
import javax.servlet.http.*;
import java.sql.*;
@SuppressWarnings("serial")
public class TestestServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Hey, world");
resp.getWriter().println("MySQL Connect Example.");
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/";
String dbName = "database_alon";
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "ADMINALON";
try {
Class.forName(driver).newInstance();
conn = …Run Code Online (Sandbox Code Playgroud) 基本上,我正在尝试这样做(错误的代码!):
<camel:setBody>
<camel:simple>resource:classpath:/myfiles/file.xml</camel:simple>
</camel:setBody>
Run Code Online (Sandbox Code Playgroud)
你会怎么做到这一点?
干杯!
classpath ×10
java ×9
spring ×2
apache-camel ×1
compilation ×1
eclipse ×1
gson ×1
jar ×1
javac ×1
javascript ×1
jboss5.x ×1
jdbc ×1
log4j ×1
mysql ×1
properties ×1
rhino ×1
symbols ×1