Desenvolvendo Plugin no Eclipse

14 respostas
D

Olá Pessoal,

Eu estou construindo um Plugin para o Eclipse, sendo que esse plugin apresenta a seguinte funcionalidade:

  • O usuário deve inserir no Windows - Preference - NomePlugin, as classpath necessárias para o funcionamento desse plugin, que são para o funcionamento do banco de dados. Nesse caso seriam msbase.jar, mssqlserver.jar e msutil.jar.

Esses dados são passados na linha de comando quando esse plugin é executado…
Eu baixei o código fonte do plugin do Tomcat e segui a linha dele…

Eu verifiquei e vi que a linha de comando que está sendo executada é a seguinte:

c:j2sdk1.4.2_01injava.exe -classpath c:msbase.jar;c:mssqlserver.jar;msutil.jar gme2db.views.Bootstrap

Mas o problema é que ele dá o erro:

java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver

Acredito que ele não esteja achando as classpaths, apesar de estarem sendo passadas na linha de comando…

Alguém poderia me ajudar?? Já tiveram esse problema antes??

Obrigada, :wink:

14 Respostas

ricardolecheta

vc pode inserir o jar para o funcionamento do seu plugin no plugin.xml,
mas isto vai vai tornar fixos os jars…

<runtime>
      <library name="seujar.jar"/>
</runtime>

do que vc precisa, se conectar num banco?

D

Sim, eu preciso me conectar ao banco de dados…

Inseri no plugin.xml e não funcionou… :cry:

ricardolecheta

da uma olhada neste código, é o que vc precisa :)

public void connect() {
		try {
			URL urls[] = new URL[1];

			String driverFile = "c:/db2java.zip";
			URLClassLoader loader = (URLClassLoader) driverCache.get(driverFile);

			if (loader == null) {
				urls[0] = new File(driverFile).toURL();
				loader = new URLClassLoader(urls);
				driverCache.put(driverFile, loader);
			}

			Class driverClass = loader.loadClass("JDBCDriver, coloque o seu aqui");
			Driver driver = (Driver) driverClass.newInstance();

			Properties props = new Properties();
			props.put("user", "usuario");
			props.put("password", "senha");

			Connection con = driver.connect("URL JDBC", props);
			if (con == null) {
				throw new SQLException("Connection Invalid, please verify URL.");
			}

		}
		catch (ClassNotFoundException e) {
			MessageView.getInstance().addMessage("Error loading driver, please check driver jar and driver class.");
		}
		catch (Throwable e) {
			MessageView.getInstance().addMessage(e);
		}
	}
D

Olá,

Foi feita a classe que faz a conexão ao banco de dados, e ela está correta, pois fiz testes sem utilizar o plugin… O problema que estou tendo é que provavelmente ele não está encontrando as variáveis que estou mandando no classpath…

ricardolecheta

colocar um jar no classpath do eclipse (internamente como plugin) não é como vc faz em java tradicional…

ou vc faz no plugin.xml, ou faz com este exemplo:

if (loader == null) { urls[0] = new File(driverFile).toURL(); loader = new URLClassLoader(urls); driverCache.put(driverFile, loader); }

note que o código acima está colocando a String driverFile no classpath, entao se esta string contiver c:/seu_driver.jdbc.jar este jar será carregado como se vc estivesse colocando ele no classpath…

ai quando vc fizer o loader.loadClass(“JDBCDriver”)… o driver do seu banco vai estar no classpath…

se vc precisa de alguns jars extra no classpath do seu plugin coloque no plugin.xml…

D

Olá,

Continua dando o mesmo erro, eu coloquei o código da maneira que vc mandou, mas continua dando erro... O erro que está dando é:

Error loading driver, please check driver jar and driver class.

O erro é na linha:

Class driverClass = loader.loadClass("com.microsoft.jdbc.sqlserver.SQLServerDriver");

Bom, é isso, vc sabe como resolver??

PS: Eu coloquei no meu plugin.xml
<runtime>
      <library name="gme2db.jar"/>
      <library name="msbase.jar"/>
      <library name="mssqlserver.jar"/>
      <library name="msutil.jar"/>
   </runtime>

Sendo que como as variáveis jars que eu necessito carregar são msbase, mssqlserver e msutil a minha driverFile é a seguinte:

String driverFile = "c:\msbase.jar;c:\mssqlserver.jar;c:\msutil.jar";
ricardolecheta

no meu exemplo o String driverFile é a localização de seu driver jdbc, precisa ter o caminho completo, c:/…/driver.jar, mas o driver é um só, não tem que separar por “;”… somente o driver … isto pq quando vc faz

Class driverClass = loader.loadClass("com.Micro$oft.jdbc.sqlserver.SQLServerDriver");

o driver precisa estar carregado… coloque somente o driver, nao estes outros jars… e o caminho completo.

O restante vc coloca lá no plugin.xml em required-plugins.

eu não conheço estes jars ai, mas se vc precisar mesmo de todos para se conectar, tente usar o array de URL, veja que é passado um URL[] para o construtor de URLClassLoader, assim crie um array com cada jar que vc precisar…

nunca fiz isso, mas deve funcionar :slight_smile:

URL urls[] = new URL[3]; 
urls[0] = ...
urls[1] = ...
urls[2] = ...
loader = new URLClassLoader(urls);
D

Para carregar o banco de dados funcionou… mas no caso do meu plugin, eu preciso carregar outra variável (dom4j-full.jar)…
Como eu faço para carregar??

Obrigada, :wink:

ricardolecheta

ai é no plugin.xml, vc tentou assim? :smiley:

<runtime> 
      <library name="dom4j-full.jar"/>

estou ficando curioso para saber sobre o que é seu plugin :wink:

D

Mas como eu carrego?

ricardolecheta
"dhardt":
Mas como eu carrego?

carregar um jar? puxa, ou eu nao estou entendo vc ou vc nao entendeu que eu lhe disse :-)

veja, eu tenho um plugin onde o plugin.xml está assim:
<runtime>
  <library name="hiberclipse.jar" /> 
  <library name="lib/jdom.jar" /> 
  <library name="lib/commons-lang.jar" /> 
  <library name="lib/commons-collections.jar" /> 
  <library name="lib/commons-beanutils.jar" /> 
  <library name="lib/velocity-dep-1.3.jar" /> 
  </runtime>
- <requires>
  <import plugin="org.eclipse.ui" /> 
  <import plugin="org.eclipse.core.resources" /> 
  <import plugin="org.eclipse.jdt.core" /> 
  <import plugin="org.eclipse.debug.core" /> 
  <import plugin="org.eclipse.jdt.ui" /> 
  <import plugin="org.eclipse.jdt.launching" /> 
  <import plugin="org.apache.xerces" /> 
  <import plugin="net.sf.abstractplugin" /> 
  <import plugin="org.eclipse.draw2d" /> 
  </requires>

vc viu em "library", em coloquei jdom.jar,velocity-dep-1.3.jar, etc..

isto pq no meu plugin eu vou usar o Jdom e velocity , entao ísto coloca estes jars no classpath do plugin... se vc nao fizer isso vai dar ClassNotFoundException...

outra configuração que vc pode fazer é tornar um plugin inteiro como required para seu plugin, neste caso eu coloquei o "draw2d", entao eu posso usar qualquer classe deste plugin, deste que este esteja instalado..

desculpe se nao consegui ajudar, mas eu já lhe disse tudo que eu sabia e com certeza tudo que vc precisava saber :-)

lá no plugin.xml, quando vc define uma library, o jar precisa estar no mesmo diretório do plugin.xml.

D

Olá Ricardo,

Eu tava viajando, agora funcionou tudo direitinho, obrigada pela ajuda

ricardolecheta

“dhardt”:
Olá Ricardo,

Eu tava viajando, agora funcionou tudo direitinho, obrigada pela ajuda

que bom :slight_smile:

D

Como você resolveu?

Criado 19 de janeiro de 2004
Ultima resposta 16 de mai. de 2013
Respostas 14
Participantes 3