Desenvolvendo Plugin no Eclipse

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:

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?

Sim, eu preciso me conectar ao banco de dados…

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

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

[code]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);
	}
}[/code]

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…

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…

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:

[code] Class driverClass = loader.loadClass(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);

[/code]

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";

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); 

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:

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:

Mas como eu carrego?

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

veja, eu tenho um plugin onde o plugin.xml está assim:

[code]






  • [/code]

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 :slight_smile:

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

Olá Ricardo,

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

[quote=“dhardt”]Olá Ricardo,

Eu tava viajando, agora funcionou tudo direitinho, obrigada pela ajuda[/quote]

que bom :slight_smile:

Como você resolveu?