<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
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.
-->
<rss version="0.91">
  <channel>
    <title>Apache NetBeans Maven Utilities - NBM Plugins Utilities - Checkstyle report</title>
    <link>http://netbeans.apache.org/mavenutilities/nb-shared</link>
    <description>Apache NetBeans Maven Utilities - NBM Plugins Utilities - Checkstyle report</description>
    <language>en-us</language>
    <copyright>&#169;2005 - 2018 The Apache Software Foundation</copyright>
    <item>
      <title>File: 2,
             Errors: 32,
             Warnings: 18,
             Infos: 0
      </title>
            <link>http://netbeans.apache.org/mavenutilities/nb-shared/checkstyle.html</link>
      <description>
        <p>Click <a href="http://netbeans.apache.org/mavenutilities/nb-shared/checkstyle.html">here</a> for the full Checkstyle report.</p>

        <table summary="Files" boder="1">
          <thead>
            <tr>
              <th>Files</th>
              <th style="width:30px;"><abbr title="Info">I</abbr></th>
              <th style="width:30px;"><abbr title="Warning">W</abbr></th>
              <th style="width:30px;"><abbr title="Error">E</abbr></th>
            </tr>
          </thead>
          <tbody>
                          <tr>
                <td>
                  <a href="http://netbeans.apache.org/mavenutilities/nb-shared/checkstyle.html#org.netbeans.nbm.utils.ExamineManifest.java">org/netbeans/nbm/utils/ExamineManifest.java</a>
                </td>
                <td>
                  0
                </td>
                <td>
                  17
                </td>
                <td>
                  30
                </td>
              </tr>
                          <tr>
                <td>
                  <a href="http://netbeans.apache.org/mavenutilities/nb-shared/checkstyle.html#org.netbeans.nbm.utils.AbstractNetbeansMojo.java">org/netbeans/nbm/utils/AbstractNetbeansMojo.java</a>
                </td>
                <td>
                  0
                </td>
                <td>
                  1
                </td>
                <td>
                  2
                </td>
              </tr>
                      </tbody>
        </table>
        
      </description>
    </item>
  </channel>
</rss>

