解决Bundle中使用反射时,报ClassNotFoundException异常
来源:互联网 发布:软件自带音效 编辑:程序博客网 时间:2024/06/01 15:44
源代码下载
user-model:
user-model/user:
/** * @author wumingkun * @version 1.0.0 * @Description */package com.demo.user.user_model;/** * @author wumingkun * */public class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String toString() {return "User [id=" + id + ", name=" + name + "]";}}user-modle/pom.xml
user-service:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.demo.user</groupId><artifactId>user-model</artifactId><version>0.0.1-SNAPSHOT</version><packaging>bundle</packaging><name>user-model</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><extensions>true</extensions><configuration><instructions></instructions></configuration></plugin></plugins></build></project>
user-action:UserService
/** * * @author wumingkun * @version 1.0.0 * @Description */package com.demo.user.user_service;/** * @author wumingkun * */public class UserSerivce {public void add(Object obj){System.out.println(obj+" add....");}}
pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo.user</groupId> <artifactId>user-service</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>bundle</packaging> <name>user-service</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> <build><plugins><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><extensions>true</extensions><configuration><instructions></instructions></configuration></plugin></plugins></build></project>
Activator
/** * @author wumingkun * @version 1.0.0 * @Description */package com.demo.user.user_action;import java.lang.reflect.Method;import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;import com.demo.user.user_service.UserSerivce;/** * @author wumingkun * */public class Activator implements BundleActivator {/* (non-Javadoc) * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) */public void start(BundleContext context) throws Exception {try {Class clz=Class.forName("com.demo.user.user_model.User");Object obj=clz.newInstance();Method setIdMethod=clz.getMethod("setId", new Class[]{int.class});setIdMethod.invoke(obj,1);Method setNameMethod=clz.getMethod("setName", new Class[]{String.class});setNameMethod.invoke(obj,"张三");UserSerivce serivce=new UserSerivce();serivce.add(obj);} catch (Exception e) {e.printStackTrace();}}/* (non-Javadoc) * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) */public void stop(BundleContext context) throws Exception {}}</pre>pom.xml<pre name="code" class="html"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.demo.user</groupId><artifactId>user-action</artifactId><version>0.0.1-SNAPSHOT</version><packaging>bundle</packaging><name>user-action</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><dependency><groupId>org.osgi</groupId><artifactId>org.osgi.core</artifactId><version>4.2.0</version></dependency><dependency><groupId>com.demo.user</groupId><artifactId>user-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><extensions>true</extensions><configuration><instructions><Bundle-Activator>com.demo.user.user_action.Activator</Bundle-Activator></instructions></configuration></plugin></plugins></build></project>
解决办法从user-action/pom.xml中可以看到它仅仅依赖了user-service,再看Activator.java文件中,import部份:
import java.lang.reflect.Method;import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;import com.demo.user.user_service.UserSerivce;
没有导入 com.demo.user.user_model,查看MANIFEST.MF
Manifest-Version: 1.0Bnd-LastModified: 1405153337259Build-Jdk: 1.5.0_22Built-By: AdministratorBundle-Activator: com.demo.user.user_action.ActivatorBundle-ManifestVersion: 2Bundle-Name: user-actionBundle-SymbolicName: com.demo.user.actionBundle-Version: 0.0.1.SNAPSHOTCreated-By: Apache Maven Bundle PluginExport-Package: com.demo.user.user_action;version="0.0.1.SNAPSHOT";uses: ="org.osgi.framework"Import-Package: com.demo.user.user_service;version="[0.0,1)",org.osgi.fr amework;version="[1.5,2)"Tool: Bnd-2.1.0.20130426-122213
它只导入了 com.demo.user.user_service及org.osgi.framework当运行Bundle时就报错了:
java.lang.ClassNotFoundException: com.demo.user.user_model.User
部署运行:user-action/pom.xml的maven-bundle-plugin中,加入Bundle使用的所有外部包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.demo.user</groupId><artifactId>user-action</artifactId><version>0.0.1-SNAPSHOT</version><packaging>bundle</packaging><name>user-action</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><dependency><groupId>org.osgi</groupId><artifactId>org.osgi.core</artifactId><version>4.2.0</version></dependency><dependency><groupId>com.demo.user</groupId><artifactId>user-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><extensions>true</extensions><configuration><instructions><Bundle-Activator>com.demo.user.user_action.Activator</Bundle-Activator><Import-Package> com.demo.user.user_service,org.osgi.framework,com.demo.user.user_model</Import-Package></instructions></configuration></plugin></plugins></build></project>
再次查看MANIFESTManifest-Version: 1.0Bnd-LastModified: 1405154955217Build-Jdk: 1.5.0_22Built-By: AdministratorBundle-Activator: com.demo.user.user_action.ActivatorBundle-ManifestVersion: 2Bundle-Name: user-actionBundle-SymbolicName: com.demo.user.actionBundle-Version: 0.0.1.SNAPSHOTCreated-By: Apache Maven Bundle PluginExport-Package: com.demo.user.user_action;version="0.0.1.SNAPSHOT";uses: ="org.osgi.framework"Import-Package: com.demo.user.user_service;version="[0.0,1)",org.osgi.fr amework;version="[1.5,2)",com.demo.user.user_modelTool: Bnd-2.1.0.20130426-122213
User [id=1, name=张三] add....
0 0
- 解决Bundle中使用反射时,报ClassNotFoundException异常
- 【解决】spring中集成hessian报异常,ClassNotFoundException:com.caucho.hessian.io.HessianDebugOutputStream
- 使用maven开发spring项目报ClassNotFoundException异常
- IDEA项目报ClassNotFoundException异常
- 在jsp页面中用javabean时:ClassNotFoundException异常解决。
- struts2 启动StrutsPrepareAndExecuteFilte报ClassNotFoundException异常
- Tomcat启动报异常java.lang.ClassNotFoundException
- 关于升级ADT22后无法使用jar包、bundle库,出现java.lang.ClassNotFoundException错误的解决
- 解决SSH2使用中报NoSuchMethod:getHibernateLazyInitializer()异常,以及struts2中返回json的说明
- Mybatis在mapper接口上使用注解报反射异常
- 解决Android报java.lang.ClassNotFoundException问题
- 解决Rose2003的java.lang.ClassNotFoundException异常
- Android中无法启动目标Activity报java.lang.ClassNotFoundException最全解决
- Android中Bundle使用
- Android中Bundle使用
- Intent中使用Bundle
- Android项目中使用BeanUtils报异常
- 项目启动时,一直报java.lang.ClassNotFoundException(类找不到异常)
- Setting Up AUTOTRACE in SQL*Plus
- 第七题(俩个链表是否相交)
- Java自学笔记模块说明
- Js自定义类时属性和方法的定义
- SIPP
- 解决Bundle中使用反射时,报ClassNotFoundException异常
- MyEclipse7.0破解下载
- Android代码总结,Sdcard和图片相关
- 天下会 - 搜索实战系列之视频
- Windows X Server
- PHP中Call to undefined function mb_substr()处理方法!
- CentOS nutch solr 集成问题 (二 )
- 艾丝凡到分撒旦飞洒打
- 基于jQuery的2048游戏