// 
//     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.
//

= DevFaqEpl3rdPartySources
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki DevFaqEpl3rdPartySources
:description: Apache NetBeans wiki DevFaqEpl3rdPartySources
:toc: left
:toc-title:
:syntax: true

== Where to download sources of EPL third-party components?

The following third-party components licensed under EPL license have the sources available for download from netbeans.org:

|===
|3rd party component |binaries in installed product |download of sources 

|... name with version number |... a path inside NB installation folder |... link to a zip file stored at hg.nb.org/binaries 

|JUnit 4.12 |platform/modules/ext/junit-4.12.jar |link:http://hg.netbeans.org/binaries/A6C32B40BF3D76ECA54E3C601E5D1470C86FCDFA-junit-4.12-sources.jar[sources] 

|EclipseLink 2.5.1 |java/modules/ext/eclipselink/* |link:http://hg.netbeans.org/binaries/9E77FD7D09168AA2F01E1E0C9D2FA2498F313973-eclipselink-src-2.5.1.v20130918-f2b9fc5.zip[sources] 

|org.eclipse.osgi 3.9.1 |platform/modules/ext/org.eclipse.osgi_3.9.1.v20140110-1610.jar |link:http://hg.netbeans.org/binaries/3435D72408ED96338439116A54B922ED02668713-org.eclipse.osgi.source_3.9.1.v20140110-1610.jar[sources] 

|org.eclipse.core.contenttype 3.4.100 |ide/modules/org-eclipse-core-contenttype.jar |link:http://hg.netbeans.org/binaries/93C09088CAC6BD49C43600781A0EBAB0F8C4DFA7-org.eclipse.core.contenttype.source_3.4.100.v20100505-1235.jar[sources] 

|org.eclipse.core.jobs 3.5.101 |ide/modules/org-eclipse-core-jobs.jar |link:http://hg.netbeans.org/binaries/2D072755F6B3DC2124173B6F713D69A08AB58255-org.eclipse.core.jobs.source_3.5.101.v20120113-1953.jar[sources] 

|org.eclipse.core.net 1.2.100  |ide/modules/org-eclipse-core-net.jar |link:http://hg.netbeans.org/binaries/CC45F3EB67A3B548B8CAA607C9BB6D1438475A90-org.eclipse.core.net.source_1.2.100.I20100511-0800.jar[sources] 

|org.eclipse.core.runtime 3.7.0 |ide/modules/org-eclipse-core-runtime.jar |link:http://hg.netbeans.org/binaries/61A1483E98B6A32E902603ADE0F18EC092A81583-org.eclipse.core.runtime.source_3.7.0.v20110110.jar[sources] 

|org.eclipse.core.runtime.compatibility.auth 3.2.200 |ide/modules/org-eclipse-core-runtime-compatibility-auth.jar |link:http://hg.netbeans.org/binaries/B0474E02C843BCD7B8370AC8E51175646E3A52EA-org.eclipse.core.runtime.compatibility.auth.source_3.2.200.v20100517.jar[sources] 

|org.eclipse.equinox.app 1.3.100 |ide/modules/org-eclipse-equinox-app.jar |link:http://hg.netbeans.org/binaries/5817967141D926F27FDF9C3EAD97AE106FFCD79E-org.eclipse.equinox.app.source_1.3.100.v20110321.jar[sources] 

|org.eclipse.equinox.common 3.6.0 |ide/modules/org-eclipse-equinox-common.jar |link:http://hg.netbeans.org/binaries/92CAA7B4757BF8FBDA0DC690A1EE9060A9A92B06-org.eclipse.equinox.common.source_3.6.0.v20100503.jar[sources] 

|org.eclipse.equinox.preferences 3.4.2 |ide/modules/org-eclipse-equinox-preferences.jar |link:http://hg.netbeans.org/binaries/D878A46A74B4A5FCD1F1D5390490D10DE3A6C8E8-org.eclipse.equinox.preferences.source_3.4.2.v20120111-2020.jar[sources] 

|org.eclipse.equinox.registry 3.5.200 |ide/modules/org-eclipse-equinox-registry.jar |link:http://hg.netbeans.org/binaries/1DF39F018A41E7AA987263CFFC54385688C36A73-org.eclipse.equinox.registry.source_3.5.200.v20120522-1841.jar[sources] 

|org.eclipse.equinox.security 1.1.1 |ide/modules/org-eclipse-equinox-security.jar |link:http://hg.netbeans.org/binaries/E31B15155B913C6333AFD5DDEDD66AF36306D5CD-org.eclipse.equinox.security.source_1.1.1.R37x_v20110822-1018.jar[sources] 

|org.eclipse.mylyn.bugzilla.core 3.17.0 |ide/modules/org-eclipse-mylyn-bugzilla-core.jar |link:http://hg.netbeans.org/binaries/93FE3698ADEA710869E3D5149A96A419C91D55C1-org.eclipse.mylyn.bugzilla.core.source_3.17.0.v20150828-2026.jar[sources] 

|org.eclipse.mylyn.commons.core 3.17.0 |ide/modules/org-eclipse-mylyn-commons-core.jar |link:http://hg.netbeans.org/binaries/0D3EED2AD82E0FAB15B07BFBEF97D24B94165EEE-org.eclipse.mylyn.commons.core.source_3.17.0.v20150625-2042.jar[sources] 

|org.eclipse.mylyn.commons.net 3.17.0 |ide/modules/org-eclipse-mylyn-commons-net.jar |link:http://hg.netbeans.org/binaries/9953E6E43332C77FB8AF8631A1EDE416013880AE-org.eclipse.mylyn.commons.net.source_3.17.0.v20150706-2057.jar[sources] 

|org.eclipse.mylyn.commons.repositories.core 1.9.0 |ide/modules/org-eclipse-mylyn-commons-repositories-core.jar |link:http://hg.netbeans.org/binaries/D6CA71AC17E4DA7B9007757E225CDDEE95D9A426-org.eclipse.mylyn.commons.repositories.core.source_1.9.0.v20150625-2042.jar[sources] 

|org.eclipse.mylyn.commons.soap 3.10.0 |ide/modules/org-eclipse-mylyn-commons-soap.jar |link:http://hg.netbeans.org/binaries/1CC710EAE8D591B11AC7D55758BE2CE3A0E240AA-org.eclipse.mylyn.commons.soap.source_3.10.0.20130704-2116.jar[sources] 

|org.eclipse.mylyn.commons.xmlrpc 3.17.0 |ide/modules/org-eclipse-mylyn-commons-xmlrpc.jar |link:http://hg.netbeans.org/binaries/755DBAA81511A7811E8AC1CDA9F4D966E5531753-org.eclipse.mylyn.commons.xmlrpc.source_3.17.0.v20150625-2042.jar[sources] 

|org.eclipse.mylyn.tasks.core 3.17.0 |ide/modules/org-eclipse-mylyn-tasks-core.jar |link:http://hg.netbeans.org/binaries/842E31A6108D31769D153054C1A19B23D2E6D2C8-org.eclipse.mylyn.tasks.core.source_3.17.0.v20150828-2026.jar[sources] 

|org.eclipse.mylyn.wikitext.core 2.6.0 |ide/modules/org-eclipse-mylyn-wikitext-core.jar |link:https://hg.netbeans.org/binaries/3EA36D04CDA2BF99517601FE50E1AB602549C54C-org.eclipse.mylyn.wikitext.core.source_2.6.0-patched.zip[sources] 

|org.eclipse.mylyn.wikitext.confluence.core 2.6.0 |ide/modules/org-eclipse-mylyn-wikitext-confluence-core.jar |link:https://hg.netbeans.org/binaries/582C6DDFB13DDB83C1725DFF1D25F803F2D633F1-org.eclipse.mylyn.wikitext.confluence.core.source_2.6.0.v20150901-2143.jar[sources] 

|org.eclipse.mylyn.wikitext.markup.core 2.6.0 |ide/modules/org-eclipse-mylyn-wikitext-markup-core.jar |link:https://hg.netbeans.org/binaries/B29C686F75CB89A0B6E7A0B923A7E16C4F063969-org.eclipse.mylyn.wikitext.markdown.core.source_2.6.0.v20150901-2143.jar[sources] 

|org.eclipse.mylyn.wikitext.textile.core 2.6.0 |ide/modules/org-eclipse-mylyn-wikitext-textile-core.jar |link:https://hg.netbeans.org/binaries/8F0AA8645CBD54943C87E9AAB236C6BA4F038FA8-org.eclipse.mylyn.wikitext.textile.core.source_2.6.0.v20150901-2143.jar[sources] 

|JIRA eclipse connector 3.0.4 |com-atlassian-connector-eclipse-commons-core.jar
com-atlassian-connector-eclipse-jira-core.jar |link:http://hg.netbeans.org/binaries/9C00174B5B496DE1C79EDAA0B0C226CB38085DE6-com.atlassian.connector.eclipse.commons.core-3.0.4.zip[c.a.c.e.commons.core-sources] link:http://hg.netbeans.org/binaries/ADB3C1F66A094A6BC0B8DA8DC90244F2FE607D36-com.atlassian.connector.eclipse.jira.core-3.0.4.zip[c.a.c.e.jira.core-sources] 
|===

=== Older components used in previous releases

|===
|3rd party component |binaries in installed product |download of sources 

|EclipseLink 2.3 |java/modules/ext/eclipselink/* |link:http://hg.netbeans.org/binaries/FBE4CFBA58F293C90D197FEF3FA44C547E7976C7-eclipselink-src-2.3.0.v20110604-r9504.zip[sources] 

|org.eclipse.osgi 3.8.0 |platform/modules/ext/org.eclipse.osgi_3.8.0.v20120529-1548.jar |link:http://hg.netbeans.org/binaries/E150624772453437D207F01896B30C8BDBA7BF37-org.eclipse.osgi.source_3.8.0.v20120529-1548.jar[sources] 

|org.eclipse.osgi 3.7.1 |platform/modules/ext/org.eclipse.osgi_3.7.1.R37x_v20110808-1106.jar |link:http://hg.netbeans.org/binaries/BEA925ABD6733CC5BB7ACE90C87D3DB612BD9BCA-org.eclipse.osgi.source_3.7.1.R37x_v20110808-1106.jar[sources] 

|org.eclipse.osgi 3.6.0 |platform/modules/ext/org.eclipse.osgi.source_3.6.0.v20100517.jar |link:http://hg.netbeans.org/binaries/B6631615DB4268B245FC8DD4D428D47DEBCC40AB-org.eclipse.osgi.source_3.6.0.v20100517.jar[sources] 

|org.eclipse.core.jobs 3.5.1  |ide/modules/org-eclipse-core-jobs.jar |link:http://hg.netbeans.org/binaries/0EA24B3BAE3A1F1334D81A923FB7C49CE739C2BC-org.eclipse.core.jobs.source_3.5.1.R36x_v20100824.jar[sources] 

|org.eclipse.core.runtime 3.6.0 |ide/modules/org-eclipse-core-runtime.jar |link:http://hg.netbeans.org/binaries/B61890F95463589FEE96F2E66EEF0F19BD85CA8F-org.eclipse.core.runtime.source_3.6.0.v20100505.jar[sources] 

|org.eclipse.equinox.app 1.3.1 |ide/modules/org-eclipse-equinox-app.jar |link:http://hg.netbeans.org/binaries/2C725136C1E832C631A4939CB2E8092B49A617F0-org.eclipse.equinox.app.source_1.3.1.R36x_v20100803.jar[sources] 

|org.eclipse.equinox.preferences 3.3.0 |ide/modules/org-eclipse-equinox-preferences.jar |link:http://hg.netbeans.org/binaries/4DA94D06D538A5187289DA9350BE4E86A5BA3ECE-org.eclipse.equinox.preferences.source_3.3.0.v20100503.jar[sources] 

|org.eclipse.equinox.registry 3.5.0 |ide/modules/org-eclipse-equinox-registry.jar |link:http://hg.netbeans.org/binaries/B2FA46A9FD5CEB8A34CBF86BE0A70604A99F4788-org.eclipse.equinox.registry.source_3.5.0.v20100503.jar[sources] 

|org.eclipse.equinox.security 1.0.200 |ide/modules/org-eclipse-equinox-security.jar |link:http://hg.netbeans.org/binaries/CFAC5DE06A2480A8C43D175B303938B26DD3D319-org.eclipse.equinox.security.source_1.0.200.v20100503.jar[sources] 

|org.eclipse.mylyn.bugzilla.core 3.9.0 |ide/modules/org-eclipse-mylyn-bugzilla-core.jar |link:http://hg.netbeans.org/binaries/4954B7C9FB474039C87E320457C66C4FFBDCE4B4-org.eclipse.mylyn.bugzilla.core.source_3.9.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.commons.core 3.9.0 |ide/modules/org-eclipse-mylyn-commons-core.jar |link:http://hg.netbeans.org/binaries/1791646115720C345433C02EB1057DAF32660768-org.eclipse.mylyn.commons.core.source_3.9.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.commons.net 3.9.0 |ide/modules/org-eclipse-mylyn-commons-net.jar |link:http://hg.netbeans.org/binaries/C4FE682262EF539EE7C36A3758E8A90DEA99632E-org.eclipse.mylyn.commons.net.source_3.9.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.commons.repositories.core 1.1.0 |ide/modules/org-eclipse-mylyn-commons-repositories-core.jar |link:http://hg.netbeans.org/binaries/89D29EDD13C137FD209A5F3F6B8CEEEA98651D82-org.eclipse.mylyn.commons.repositories.core.source_1.1.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.commons.soap 3.9.0 |ide/modules/org-eclipse-mylyn-commons-soap.jar |link:http://hg.netbeans.org/binaries/C9F11514C77B339A7455981834EBB1752220D7D0-org.eclipse.mylyn.commons.soap.source_3.9.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.commons.xmlrpc 3.9.0 |ide/modules/org-eclipse-mylyn-commons-xmlrpc.jar |link:http://hg.netbeans.org/binaries/EB7CB896086B8751B430616A976DDFBFD75B98A8-org.eclipse.mylyn.commons.xmlrpc.source_3.9.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.tasks.core 3.9.0 |ide/modules/org-eclipse-mylyn-tasks-core.jar |link:http://hg.netbeans.org/binaries/8DCC3741CD0071CF418EBB92CC67EB4FEC695031-org.eclipse.mylyn.tasks.core.source_3.9.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.wikitext.core 1.8.0 |ide/modules/org-eclipse-mylyn-wikitext-core.jar |link:https://hg.netbeans.org/binaries/78CEC75DD7834838A0C214E4409FC0C0EE355659-org.eclipse.mylyn.wikitext.core.source_1.8.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.wikitext.confluence.core 1.8.0 |ide/modules/org-eclipse-mylyn-wikitext-confluence-core.jar |link:https://hg.netbeans.org/binaries/EC9F3D9A69CF2493EC074BF6950C242003A2DA66-org.eclipse.mylyn.wikitext.confluence.core.source_1.8.0.v20130612-0100.jar[sources] 

|org.eclipse.mylyn.wikitext.textile.core 1.8.0 |ide/modules/org-eclipse-mylyn-wikitext-textile-core.jar |link:https://hg.netbeans.org/binaries/82EFA9F844A1392D95F66D3DF7999FAFFD2C4E76-org.eclipse.mylyn.wikitext.textile.core.source_1.8.0.v20130612-0100.jar[sources] 

|JIRA eclipse connector 3.0.4 |com-atlassian-connector-eclipse-commons-core.jar
com-atlassian-connector-eclipse-jira-core.jar |link:http://hg.netbeans.org/binaries/9C00174B5B496DE1C79EDAA0B0C226CB38085DE6-com.atlassian.connector.eclipse.commons.core-3.0.4.zip[c.a.c.e.commons.core-sources] link:http://hg.netbeans.org/binaries/ADB3C1F66A094A6BC0B8DA8DC90244F2FE607D36-com.atlassian.connector.eclipse.jira.core-3.0.4.zip[c.a.c.e.jira.core-sources] 

|org.eclipse.mylyn.bugzilla.core 3.6.0 |ide/modules/org-eclipse-mylyn-bugzilla-core.jar |link:http://hg.netbeans.org/binaries/755000391E40ADE9F4EB40A954E92FEEFC067138-org.eclipse.mylyn.bugzilla.core.source_3.6.0.v20110608-1400.jar[sources] 

|org.eclipse.mylyn.commons.core 3.6.0  |ide/modules/org-eclipse-mylyn-commons-core.jar |link:http://hg.netbeans.org/binaries/20900A1BB8FA36C61C75D777BDF8A207F65ACFE3-org.eclipse.mylyn.commons.core.source_3.6.0.v20110608-1400.jar[sources] 

|org.eclipse.mylyn.commons.net 3.6.0 |ide/modules/org-eclipse-mylyn-commons-net.jar |link:http://hg.netbeans.org/binaries/4F6590200F311C1B3C1D188FB7468570D2ABC20C-org.eclipse.mylyn.commons.net.source_3.6.0.v20110608-1400.jar[sources] 

|org.eclipse.mylyn.commons.xmlrpc 3.6.0 |ide/modules/org-eclipse-mylyn-commons-xmlrpc.jar |link:http://hg.netbeans.org/binaries/C34376CC794BD5101EBFD34914DF1E28AB1FDC76-org.eclipse.mylyn.commons.xmlrpc.source_3.6.0.v20110608-1400.jar[sources] 

|org.eclipse.mylyn.tasks.core 3.6.0 |ide/modules/org-eclipse-mylyn-tasks-core.jar |link:http://hg.netbeans.org/binaries/E45B89E54E9D135BBB014686C83B1F1045D6DE98-org.eclipse.mylyn.tasks.core.source_3.6.0.v20110608-1400.jar[sources] 

|org.eclipse.mylyn.wikitext.core 1.7.1 |ide/modules/org-eclipse-mylyn-wikitext-core.jar |link:http://hg.netbeans.org/binaries/3D4A2DD30C355E9D8FAE55AEAB2D91EE55AF0079-org.eclipse.mylyn.wikitext.core.source_1.7.1.v20120725-0100.jar[sources] 

|org.eclipse.mylyn.wikitext.confluence.core 1.7.1 |ide/modules/org-eclipse-mylyn-wikitext-confluence-core.jar |link:http://hg.netbeans.org/binaries/EAECDE39298C08D8C704DA9723D8F7DFDF0AC1E2-org.eclipse.mylyn.wikitext.confluence.core.source_1.7.1.v20120725-0100.jar[sources] 

|org.eclipse.mylyn.wikitext.textile.core 1.7.1 |ide/modules/org-eclipse-mylyn-wikitext-textile-core.jar |link:http://hg.netbeans.org/binaries/44F35A62CAD11C0DC6B6DEA6C798AFCD43B500B3-org.eclipse.mylyn.wikitext.textile.core.source_1.7.1.v20120725-0100.jar[sources] 
|===

=== Apache Migration Information

The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.

This page was exported from link:http://wiki.netbeans.org/DevFaqEpl3rdPartySources[http://wiki.netbeans.org/DevFaqEpl3rdPartySources] , 
that was last modified by NetBeans user Tstupka 
on 2016-03-31T09:43:15Z.


*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.
