我正在尝试运行junit4.7附带的样本测试并遇到一些困难.
java是尊重我的CLASSPATH:
me@dinosaurhunter ~/Desktop> export CLASSPATH=
me@dinosaurhunter ~/Desktop> echo $CLASSPATH
me@dinosaurhunter ~/Desktop> java junit.textui.TestRunner junit.samples.AllTests
Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/TestRunner
me@dinosaurhunter ~/Desktop> source /etc/profile
me@dinosaurhunter ~/Desktop> echo $CLASSPATH
:/Library/Java/Extensions/junit/:/Library/Java/Extensions/junit/junit.jar
me@dinosaurhunter ~/Desktop> java junit.textui.TestRunner junit.samples.AllTests
Exception in thread "main" java.lang.NoClassDefFoundError: junit/framework/Test
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at junit.runner.BaseTestRunner.loadSuiteClass(BaseTestRunner.java:207)
at junit.runner.BaseTestRunner.getTest(BaseTestRunner.java:100)
at junit.textui.TestRunner.start(TestRunner.java:179)
at junit.textui.TestRunner.main(TestRunner.java:138)
Run Code Online (Sandbox Code Playgroud)
但正如你所看到的,它无法找到junit/framework/Test......我看着/Library/Java/Extensions/junit/junit.jar它,但它包括在内.
/Library/Java/Extensions/junit/junit.jar是一个符号链接.这样可以吗?
这是一个scjp模拟考试题.
假设我有以下两个文件:
package pkg;
public class Kit {
public String glueIt (String a, String b) {return a+b;}
}
import pkg.*;
class UseKit {
public static void main(String[]args) {
String s = new Kit().glueIt(args[1],args[2]);
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
以下目录结构:
test
|--UseKit.class
|
com
|--KitJar.jar
Run Code Online (Sandbox Code Playgroud)
当前目录是test,文件pkg/Kit.class在KitJar.jar
根据答案,产生输出bc的java调用是
java -classpath com/KitJar.jar:. UseKit a b c
Run Code Online (Sandbox Code Playgroud)
请解释运营商":"和"."的使用.
MyClassWithMainMethod.java使用someJar.jar的类.
如果我打电话:
java -cp someJar.jar MyClassWithMainMethod
Run Code Online (Sandbox Code Playgroud)
我得到了例外:
Exception in thread "main" java.lang.NoClassDefFoundError: MyClassWithMainMethod
Caused by: java.lang.ClassNotFoundException: MyClassWithMainMethod
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
Run Code Online (Sandbox Code Playgroud)
但是当我手动将CLASSPATH设置为我的jar时
export CLASSPATH=:/path/to/someJar.jar
Run Code Online (Sandbox Code Playgroud)
它的工作原理
java MyClassWithMainMethod
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在开发一个Eclipse插件,需要构建一个可以访问Eclipse中项目类路径中所有内容的类加载器.我有一个IJavaProject,我正在尝试构建一个URL列表以传递给URLClassLoader:
final IClasspathEntry[] resolvedClasspath = javaProject.getResolvedClasspath(true);
for (IClasspathEntry classpathEntry : resolvedClasspath) {
urls.add(classpathEntry.getPath().makeAbsolute().toFile().getCanonicalFile().toURL());
}
Run Code Online (Sandbox Code Playgroud)
但是任何项目依赖项(手动添加,或者来自Maven插件的"Maven Dependencies"容器)都显示为刚刚"file:/ projectName",而不是绝对路径.
其他实验涉及使用javaProject.getAllPackageFragmentRoots(),但这似乎不包括"Maven依赖关系"容器内的项目依赖项.
最近我将核心servlet应用程序的核心功能分成了一个jar文件.此jar文件现在部署在tomcat的lib文件夹中,应用程序(即servlets,jsps,properties files..etc)作为war文件独立部署.
jar文件需要特定的属性文件.我将这些属性文件放在war文件中的"src"文件夹下(即类层次结构的顶部).
在过去,当所有东西都在同一个项目中并部署在一个war文件中时.相关类可以访问属性文件.现在,当这些类部署在jar中时,它们无法看到war文件中的属性文件(即已部署的Web应用程序).
我在这里可以缺少什么?我如何加载proeprties文件的示例:
properties.load(getClass().getResourceAsStream("/appconfig.properties"));
Run Code Online (Sandbox Code Playgroud)
感谢您的时间.
javac -classpath "/installs/hadoop-0.20.2/*.jar;/installs/hadoop-0.20.2/lib/*.jar" appClientModule/grid/comp/tools/CleanTmp.java
appClientModule/grid/comp/tools/CleanTmp.java:2: package org.apache.hadoop.fs does not exist
import org.apache.hadoop.fs.*;
^
appClientModule/grid/comp/tools/CleanTmp.java:3: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.JobConf;
^
appClientModule/grid/comp/tools/CleanTmp.java:4: package org.apache.commons.logging does not exist
import org.apache.commons.logging.*;
^
appClientModule/grid/comp/tools/CleanTmp.java:5: package org.apache.commons.logging.impl does not exist
import org.apache.commons.logging.impl.Log4JLogger;
^
appClientModule/grid/comp/tools/CleanTmp.java:8: cannot find symbol
symbol : class Log4JLogger
location: class grid.comp.tools.CleanTmp
Log4JLogger lg=new Log4JLogger(this.getClass().getName());
^
appClientModule/grid/comp/tools/CleanTmp.java:9: cannot find symbol
symbol : class JobConf
location: class grid.comp.tools.CleanTmp
JobConf jconf;
^
appClientModule/grid/comp/tools/CleanTmp.java:8: cannot find symbol
symbol : class Log4JLogger
location: class grid.comp.tools.CleanTmp …Run Code Online (Sandbox Code Playgroud) 我有一个源文件SerialTalk.java,在目录C:\ javasrc\BattProj中
该文件从RXTXcomm.jar导入类,例如.
import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; ...
RXTXcomm.jar与SerialTalk.java位于同一目录中.我编译指定一个指向当前目录的类路径:
javac -verbose -classpath.SerialTalk.java
总是,我得到以下错误.(实际上,此错误的许多实例和变体):
SerialTalk.java:3:错误:包gnu.io不存在import gnu.io.CommPortIdentifier;
当我打开RXTXcomm.jar(例如7-Zip)时,我可以看到gnu.io结构,以及我试图导入的特定.class文件.
那么我做错了什么?已编译相同的.java(源)文件并在Netbeans IDE中的另一个工作站上运行.这里的区别是我正在尝试使用命令行中的javac编译它.(环境是Win7,32位,jdk1.7.0_03)
我有一个问题是将Windows批处理文件更改为unix shell脚本,以便在我的linux机器上执行相同的java代码.
我的shell脚本看起来像这样:
#!/bin/bash
libdir=../lib
bindir=.
LIBS=$libdir/lib_1.jar;$libdir/lib_2.jar;$libdir/lib_3.jar;$libdir/lib_4.jar
java -cp $bindir;$LIBS com.sample.SampleServer
Run Code Online (Sandbox Code Playgroud)
对我来说它看起来正确但我收到以下错误信息:
Failed to load Main-Class manifest attribute from /home/user/development/lib/lib_2.jar
在此先感谢您的帮助.
从我们的Grails/Groovy应用程序中,我们需要使用遗留Java服务类中的服务,其构造函数具有org.springframework.core.io.Resource类型的参数,例如
public ServiceClass(Resource someResource)
Run Code Online (Sandbox Code Playgroud)
我们需要使用Spring DSL将服务类的实例注入到我们应用程序的Groovy类中,资源引用/ src/main/resources中的XML文件.我试图为此目的创建Spring配置,但到目前为止我找不到一个可行的解决方案.配置文件的相关部分如下所示
beans = {
xmlns aop:"http://www.springframework.org/schema/aop",
sec:"http://www.springframework.org/schema/security",
context:"http://www.springframework.org/schema/context"
serviceClass(com.somepackage.ServiceClass) {
//here we need to refer to the constructor arg XML file some way
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种教程中的多种语法,例如关闭beanDefinition.constructorArgs,但遗憾的是到目前为止还没有成功.虽然应用程序编译(grails:war)和启动(grails:run-app)都没有表明bean接线存在任何问题,但当应用程序实际加载到浏览器中时,我们收到一个NPE,说明我们的Groovy类到哪个注入服务类,是一个null对象.所以看起来豆接线毕竟不成功.任何帮助表示赞赏
这个问题已被问到,但没有一个解决方案对我有用:
我想复制我在POM.xml构建中通过依赖标记指定的jar:
<dependency>
...
</dependency>
Run Code Online (Sandbox Code Playgroud)
进入像target/lib这样的文件夹
pom.xml中:
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${project.artifactId}-${project.version}</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.googlecode.addjars-maven-plugin</groupId>
<artifactId>addjars-maven-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<goals>
<goal>add-jars</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${project.build.directory}/my-repo</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<classpathPrefix>lib/</classpathPrefix>
<addClasspath>true</addClasspath>
<mainClass>Swapper</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/lib/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
Run Code Online (Sandbox Code Playgroud)
就像我说的,根本没有任何东西被复制.但根据该门户网站上的一些问答,它应该可行.
有任何想法吗?