<?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 - NB Repository Plugin - Checkstyle report</title>
    <link>http://netbeans.apache.org/mavenutilities/nb-repository-plugin</link>
    <description>Apache NetBeans Maven Utilities - NB Repository Plugin - Checkstyle report</description>
    <language>en-us</language>
    <copyright>&#169;2005 - 2018 The Apache Software Foundation</copyright>
    <item>
      <title>File: 3,
             Errors: 172,
             Warnings: 0,
             Infos: 0
      </title>
            <link>http://netbeans.apache.org/mavenutilities/nb-repository-plugin/checkstyle.html</link>
      <description>
        <p>Click <a href="http://netbeans.apache.org/mavenutilities/nb-repository-plugin/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-repository-plugin/checkstyle.html#org.netbeans.nbm.repository.PopulateRepositoryMojo.java">org/netbeans/nbm/repository/PopulateRepositoryMojo.java</a>
                </td>
                <td>
                  0
                </td>
                <td>
                  0
                </td>
                <td>
                  110
                </td>
              </tr>
                          <tr>
                <td>
                  <a href="http://netbeans.apache.org/mavenutilities/nb-repository-plugin/checkstyle.html#org.netbeans.nbm.repository.DownloadIndexMojo.java">org/netbeans/nbm/repository/DownloadIndexMojo.java</a>
                </td>
                <td>
                  0
                </td>
                <td>
                  0
                </td>
                <td>
                  61
                </td>
              </tr>
                          <tr>
                <td>
                  <a href="http://netbeans.apache.org/mavenutilities/nb-repository-plugin/checkstyle.html#org.netbeans.nbm.repository.HelpMojo.java">org/netbeans/nbm/repository/HelpMojo.java</a>
                </td>
                <td>
                  0
                </td>
                <td>
                  0
                </td>
                <td>
                  1
                </td>
              </tr>
                      </tbody>
        </table>
        
      </description>
    </item>
  </channel>
</rss>

