在maven项目中(Intellij Idea)我有java.lang.ClassNotFoundException
,因为我正在尝试创建一个需要一些外部库的类的对象。
public HelloWorldController() {
service = new FileService();
products.add(new Product("hello"));
products.add(new Product("world"));
}
没有service = new FileService();
,一切都很完美,这里是FileService类:
public class FileService {
public FileService()
{
irodsAccount = new IRODSAccount("192.168.6.128",1247,"rods","rods","","tempZone","demoResc");
try {
irodsFileSystem = new IRODSFileSystem();
}
catch (JargonException ex) {
}
try {
this.dataTransferOps = irodsFileSystem.getIRODSAccessObjectFactory().getDataTransferOperations(irodsAccount);
}
catch (JargonException ex) {
}
}
private String targetIrodsFileAbsolutePath;
private IRODSAccount irodsAccount;
private IRODSFileSystem irodsFileSystem;
private TransferControlBlock transferControlBlock;
private DataTransferOperations dataTransferOps = null;
public IRODSFile getIRODSFileForPath(String irodsFilePath) throws Exception {
if (irodsFilePath == null || irodsFilePath.isEmpty()) {
throw new Exception("null or empty irodsFilePath");
}
return irodsFileSystem.getIRODSFileFactory(irodsAccount).instanceIRODSFile(irodsFilePath);
}
}
IRODSAccount
,IRODSFileSystem
和其他类似的类来自外部jar,我连接到项目(添加模块),但在运行我的项目之后,我有类似的东西:
Caused by: java.lang.ClassNotFoundException: org.irods.jargon.core.exception.JargonException
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:401)
at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363)
... 62 more
一切都运行良好,不是在同一个罐子的maven项目中(我没有得到java.lang.ClassNotFoundException
)。
向pom.xml
文件添加依赖项并没有解决我的问题,我从之前的项目中复制了这个:
<dependency>
<groupId>org.irods.jargon</groupId>
<artifactId>jargon-httpstream</artifactId>
<version>${jargon.version}</version>
</dependency>
但遗憾的是,在<version>${jargon.version}</version>
行中,jargon.version未被识别为正确的陈述。
答案 0 :(得分:0)
因为根据Maven documentation on the exec:exec目标,您需要拥有&lt; \ classpath&gt;您的配置中的节,以包括整个项目模块类路径。
但是,由于某种原因,似乎Maven正在使用完全(且正确)配置的类路径运行程序。
为了解决问题的根源,我将使用-X命令行参数运行Maven并仔细扫描调试输出,直到找到它运行的确切命令。然后我尝试从同一目录运行它,确保我使用相同的Java安装并查看它是否有效。
答案 1 :(得分:0)
<version>${jargon.version}</version>
在
中添加正确的版本 <properties>
<jargon.version>2.4.1-SNAPSHOT<jargon.version>
</properties>
在您的pom文件中或直接
<version>2.4.1-SNAPSHOT</version>