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

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

=== I find files missing from the source ZIP file

If you've downloaded and unpacked the ZIP file containing NetBeans sources but find that it seems incomplete, try using another application to unpack the ZIP file.  It seems that the popular WinZip application cannot properly handle this file.

The link:http://www.7-zip.org/[7-Zip application] is free, open source and is known to correctly handle the NetBeans ZIP sources.  

link:http://www.info-zip.org/[Info-ZIP] is a free command-line unzip utility for Windows and OS/2 which has been around for more than a decade.

Alternatively, you could write a simple Ant script to use the `unzip` task for decompressing the archive, or use a ported version of a Unix unzip utility for Windows.

=== 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/DevFaqTroubleshootMissingItemsInZippedSources[http://wiki.netbeans.org/DevFaqTroubleshootMissingItemsInZippedSources] , 
that was last modified by NetBeans user Tboudreau 
on 2010-01-24T02:31:21Z.


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