// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Integração com Ferramentas e Serviços Externos
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Integração com Ferramentas e Serviços Externos - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Integração com Ferramentas e Serviços Externos

Para facilitar o desenvolvimento de vários tipos de aplicações, o NetBeans IDE oferece a integração com alguns serviços e ferramentas externos. Os recursos listados abaixo o ajudarão a aprender como configurar e usar tais ferramentas e serviços, por exemplo, como conectar ao banco de dados, gerenciar seu código-fonte usando software de controle de versão e usar o suporte integrado dos rastreadores de problemas.

== Tutoriais e Artigos

=== Bancos de Dados

* link:../docs/ide/oracle-db.html[+Conectando-se a um Banco de Dados Oracle a partir do NetBeans IDE+]
* link:../docs/ide/java-db.html[+Trabalhando com o Banco de Dados Java DB (Derby)+]
* link:../docs/ide/mysql.html[+Conectando a um Banco de Dados MySQL+]
* link:../docs/web/mysql-webapp.html[+Criando uma Aplicação Web Simples Usando um Banco de Dados MySQL+]
* link:../docs/ide/install-and-configure-mysql-server.html[+Configurando o Servidor de Banco de Dados MySQL no Sistema Operacional Windows+]

=== Maven

* link:../docs/java/maven-hib-java-se.html[+Criando uma Aplicação Maven Swing Usando Hibernate+]
* link:http://wiki.netbeans.org/MavenBestPractices[+Melhores Práticas do Maven+]

=== Gerenciamento de Código-Fonte

* link:../docs/ide/mercurial-queues.html[+Usando Suporte às Filas do Mercurial no NetBeans IDE+]
* link:../docs/ide/git.html[+Usando Suporte Git no NetBeans IDE+]
* link:../docs/ide/mercurial.html[+Usando Suporte ao Mercurial no NetBeans IDE+]
* link:../docs/ide/subversion.html[+Usando Suporte ao Subversion no NetBeans IDE+]
* link:../docs/ide/cvs.html[+Usando Suporte ao CVS no NetBeans IDE+]
* link:../docs/ide/clearcase.html[+Usando o Suporte de ClearCase no NetBeans IDE+]

=== Desenvolvimento Colaborativo

* link:../docs/ide/team-servers.html[+Trabalhando com um Servidor de Equipe no NetBeans IDE+]

=== Otimização

* link:../docs/java/profile-loadgenerator.html[+Usando um Gerador de Carga no NetBeans IDE+]

== Screencasts

* link:../docs/ide/github_nb_screencast.html[+ Demonstração: Configurando um Repositório GitHub Usando o NetBeans IDE+]
* link:../docs/ide/git_nb_ssh_screencast.html[+Demonstração: Clonando um Repositório Git Usando o NetBeans IDE+]
* YouTube: link:http://www.youtube.com/watch?v=mQS-CViDHBU[+FindBugs in NetBeans IDE (FindBugs no NetBeans IDE)+] (_por Geertjan Wielenga_)

== Documentos de Contribuição da Comunidade

* Blog de Geertjan: link:https://blogs.oracle.com/geertjan/entry/git_in_netbeans_ide_7[+Git with Rebase in NetBeans IDE (Git com Rebase no NetBeans IDE)+]
* link:http://wiki.netbeans.org/TutorialUsingSVNLocalRepository[+ Utilizando um Repositório Local do Subversion (SVN)+]
* link:http://wiki.netbeans.org/AccessMssql[+Acessando o MS Access/MS SQL a Partir do NetBeans+]

== Outros Recursos

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG1790[+Trabalhando e Conectando-se aos Bancos de Dados+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG620[+Trabalhando com Maven no NetBeans+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG234[+Aplicando Controle de Versão às Aplicações com Controle de Versão+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG348[+Trabalhando em um Ambiente Colaborativo+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:http://wiki.netbeans.org/NetBeansUserFAQ#Version_Control_Systems[+Perguntas Frequentes sobre Controle de Versão+]
* link:http://wiki.netbeans.org/NetBeansUserFAQ#Database_Connectivity[+Perguntas Frequentes sobre Conectividade de Banco de Dados+]
* link:http://www.mysql.com/why-mysql/java/[+MySQL e Java - Recursos+]
