 -----
 Release Notes for Archiva 1.1.3
 -----

Release Notes for Archiva 1.1.3

  The Apache Archiva team would like to announce the release of Archiva 1.1.3.  Archiva is {{{http://archiva.apache.org/download.html} 
  available for download from the web site}}.

  The Archiva 1.1.3 release fixes a security issue under some circumstances which was introduced in Archiva 1.1.2, and all users are 
  encouraged to upgrade. The release also includes a small number of fixes outlined below.

  Archiva is an application for managing one or more remote repositories, including administration, artifact handling, browsing and searching.

  If you have any questions, please consult:

    * the web site: {{http://archiva.apache.org/}}

    * the archiva-user mailing list: {{http://archiva.apache.org/mail-lists.html}}

* New in Archiva 1.1

** Artifact Uploads

   To simplify adding artifacts to a repository, an upload form has been put in place that allows you to put an artifact and POM into
   the repository without the need for the Maven <<<deploy-file>>> command.

** RSS

   RSS is now available for getting a feed of new artifacts being added to a given repository. Two types of feeds are generated by Archiva:
   new artifacts in a repository and new versions of a specific artifact. Details are available in {{{userguide/rss.html}Rss Feeds}}.

** Virtual Repositories

   Virtual repositories or repository groups allows downloading from a group of repositories via one url. For more details of this feature,
   see {{{userguide/virtual-repositories.html}Virtual Repositories}}.

** Timeouts

   Connections to remote repositories can now have a configurable timeout value

** New Runtime Bundle

   The application is now distributed using Jetty 6.1 and it's documented configuration, rather than the previous
   Plexus application server bundle. It continues to use the Java Service Wrapper (v3.2.3) for application monitoring,
   though the configuration has been improved, particularly with regard to separating the application configuration from the installation.

** Using Spring

   Archiva now uses the Spring Framework as it's underlying container instead of Plexus. This results in a boost in performance and
   stability for the web application in particular.

** Using Apache Jackrabbit WebDAV Servlet

   Archiva now uses Apache Jackrabbit's WebDAV servlet for serving repository content instead of plexus-webdav. The change results in reduced
   codebase complexity, increased standards compliance, better webdav client support and a small peformance boost.

* Release Notes

  The Archiva 1.1 feature set can be seen in the {{{tour/index.html} feature tour}}.

* Changes in Archiva 1.1.3

** Bug

    * [MRM-967] - Security Issue: If repository observer role is enabled for the 'guest' user, an invalid user is able to deploy to that repository

    * [MRM-397] - background of the Archiva logo is not transparent in repositories page

    * [MRM-580] - does not give error message when one defines an illegal directory for a managed repository

    * [MRM-954] - Footer doesn't stretch across repositoryGroups page

* Changes in Archiva 1.1.2

** Bug

    * [MRM-765] - should not be possible to create a proxy connector if there are no remote repositories

    * [MRM-807] - Deployed dll won't be indexed

    * [MRM-834] - Wrong repository url when archiva is used behind Apache with mof_proxy

    * [MRM-841] - Introducing a new scannable artifact file type requires restart in order for some consumers to work

    * [MRM-880] - Archiva does not start up on Solaris 64-Bit

    * [MRM-881] - Failing to startup due to invalid bean definition

    * [MRM-893] - Illegal browse operation allow

    * [MRM-902] - If path has leading slash when being checked againts whitelists and blacklists causes matching failure

    * [MRM-903] - Repository scanning should not stop when encounters error

    * [MRM-905] - EL Expression failed with empty/not functions

    * [MRM-911] - Archiva checks user's credentials before guest's rights on the repository

    * [MRM-912] - rss urls seem to use fixed webcontext "archiva" instead of actual webcontext

    * [MRM-915] - NPE with rss links

    * [MRM-926] - NPE with search page

    * [MRM-932] - Error 500 when clicking the Next or Previous icon of the results of a search, if user is trying to search for java classes, packages or methods.

    * [MRM-934] - For bytecode search, only 1 version of the artifact is returned even if there are more than 1 version of that artifact which matched the search

    * [MRM-943] - results search option should only be available on results page

** Improvement

    * [MRM-839] - change RSS URLs

    * [MRM-848] - Pre-configured repositories initially appear to be empty

    * [MRM-874] - POM snippet for plugins should be <plugin> not <dependency>

  The full list of changes can be found {{{http://jira.codehaus.org/secure/ReleaseNote.jspa?version=14491&styleName=Text&projectId=10980} in JIRA}}.

* Changes in Archiva 1.1.1

** Bug

     * [MRM-584] - Newly created user cannot login

     * [MRM-631] - network proxy is always used when defined

     * [MRM-814] - Invalid cron expressions are accepted in Database Scanning

     * [MRM-873] - repository groups - move up/down should not show when it's not possible

     * [MRM-883] - RSS syndication java.lang.ArrayIndexOutOfBoundsException

     * [MRM-884] - network proxy fails after upgrading to archiva 1.1

     * [MRM-888] - add notes on reindexing to the upgrade docs

     * [MRM-891] - Unable to use archiva as http source with maven-stage-plugin

     * [MRM-892] - Search for java classes and package names is broken

     * [MRM-895] - Archiva version doesn't appear on the footer when it is installed on Tomcat

     * [MRM-896] - classifier is appended to pom filename after artifact upload

** Improvement

     * [MRM-817] - Artifact information screen should indicate the name of repository in which the artifact resides

  The full list of changes can be found {{{http://jira.codehaus.org/secure/ReleaseNote.jspa?version=14461&styleName=Text&projectId=10980} in JIRA}}.

* Changes in Archiva 1.1

** Sub-task

    * [MRM-801] - Create documentation for virtual repositories

    * [MRM-861] - Paginate Search Results page

** Bug

    * [MRM-234] - Moving files between repos through webdav doesn't work

    * [MRM-312] - ConcurrentModificationException

    * [MRM-523] - Appearance Actions do not work when ${user.home} is invalid.

    * [MRM-538] - Browse > Info not synchronised with updated POM contents

    * [MRM-550] - proxy connectors - move up/down should not show when it's not possible

    * [MRM-584] - Newly created user cannot login

    * [MRM-597] - Cannot run Archiva as another user because su is run with option "-" (--login)

    * [MRM-602] - add "maintainance" to the feature tour

    * [MRM-605] - unit tests fail on archiva 1.0 source distribution

    * [MRM-610] - a number of unit tests fail on windows

    * [MRM-614] - User validation message has incorrect URL

    * [MRM-624] - Failed to install Archiva as windows service

    * [MRM-629] - NullPointer when setting corporate POM on a fresh archvia install

    * [MRM-638] - some developer reports are appearing in the archiva-docs module and need to be disabled

    * [MRM-650] - Deleted metadata files still appear in search results

    * [MRM-652] - Invalid html links in "webdav" directory browsing

    * [MRM-653] - WebDAV deploy fails with error

    * [MRM-658] - org.apache.maven.archiva.repository.content.FilenameParser is unable to determine unique snapshot versions with specific version names

    * [MRM-682] - Archiva runs out of heap memory

    * [MRM-692] - Repository problem is kept in database even though its related artifact has been already removed

    * [MRM-702] - in the standalone bundle, the pid file is written into the installation directory alongside the wrapper, but should be in a temporary location

    * [MRM-711] - Security using ldap throws NullPointerException

    * [MRM-733] - Error ending component lifecycle

    * [MRM-753] - Error while deploying an artifact to archiva

    * [MRM-767] - generated LICENSE and NOTICE files need improvement

    * [MRM-768] - Cannot proxy maven2 plugin (jaxb) from a maven1 repository (http://download.java.net/maven/1)

    * [MRM-769] - CLONE - 507 Insufficient Storage when deploying artifact with webdav

    * [MRM-777] - assignments.jsp: missing <tr></tr> group under "Resource Roles":

    * [MRM-778] - DefaultDavServerManager.createServer doesn't create server

    * [MRM-780] - Access to indexes files with a browser is not possible

    * [MRM-784] - mailing-info on the website points to 'old' maven.apache.org addresses

    * [MRM-785] - No message is displayed after a successful artifact upload

    * [MRM-789] - Archiva may delete you app server installation

    * [MRM-790] - [regression] proxying metadata causes an IO exception in new checksum code

    * [MRM-792] - remove references to maven in code

    * [MRM-796] - releases always activated in repositories

    * [MRM-797] - Delete Released Snapshots doesn't work

    * [MRM-800] - Admin user account user lockout via Webdav only?

    * [MRM-810] - Uploads done through the Web UI are not reported in the audit log

    * [MRM-818] - [Repository Group] Page will be broken if entered identifier is too long

    * [MRM-819] - ERROR 404 page when clicking the URL of Repository Group with identifier i.e. "test/test"

    * [MRM-820] - 404 when the dav url of an Archiva default repository (internal or snapshots) is accessed

    * [MRM-823] - Deleted repository still shows up in the repo group

    * [MRM-824] - dependency cleanup

    * [MRM-835] - Checksum search appears broken

    * [MRM-840] - Wagon HTTP deadlocks under high load

    * [MRM-845] - Continuous Loop when you click a repository group link

    * [MRM-846] - "Repository Purge By Retention Count" option not working

    * [MRM-847] - DependencyTreeGeneratorConsumerTest fails under windows due to line ending

    * [MRM-851] - wrong taglib short-name causes deployment error on Geronimo

    * [MRM-853] - HTTP Error 500 when uploading artifact with Windows OS

    * [MRM-855] - java.lang.NoClassDefFoundError: org/apache/xml/serialize/OutputFormat

    * [MRM-856] - Artifact Upload replaces all instances of the name "jar" with "pom" when trying to change the file extension

    * [MRM-858] - last-modified header is missing

    * [MRM-865] - Upload snapshot should work like a deploy

    * [MRM-867] - 500 on HEAD method

    * [MRM-869] - many empty folders created in managed repos with proxy connectors when used in a group

    * [MRM-870] - addRepositoryToGroup.action => AbstractMethodError on DeferredDocumentImpl.getXmlStandalone()

    * [MRM-871] - jetty.host and jetty.port properties are set by default in jetty.xml preventing user from using other hostname if user is not aware of these properties

    * [MRM-872] - empty metadatas frmo a repository group

** Improvement

    * [MRM-591] - Reports should show from which repository the defective artifact was found.

    * [MRM-651] - Updated consumer plugin to build against the 1.1 apis

    * [MRM-654] - Archetype for generation of Consumer plugins

    * [MRM-667] - Timeout implementation for Archiva

    * [MRM-678] - 404 errors on proxies should be cached

    * [MRM-737] - Don't list metadata files in the search results

    * [MRM-752] - Trim URL in Remote Repositories

    * [MRM-760] - set JSW to auto-restart if it crashes or hangs

    * [MRM-773] - Improve RSS feed generation

    * [MRM-781] - Removal of Archiva-Webdav implementation in favor of Jackrabbit-webdav

    * [MRM-802] - Display the url for the repository group

    * [MRM-804] - When uploading artifacts to the repo, they should be added to the index instantly

    * [MRM-822] - add org/jvnet/**, com/sun/** to the whitelist for the default java.net repository

    * [MRM-829] - Replace Company POM feature with simple Appearence customisation

    * [MRM-831] - When deploying artifacts to the repo, they should be added to the index instantly

    * [MRM-857] - set a user agent for proxy HTTP requests

    * [MRM-859] - Use File.createTempFile() when downloading files from a remote repository

** New Feature

    * [MRM-123] - add RSS view to repository manager

    * [MRM-216] - Upload (deploy) artifacts to a repository - via a web form (not using wagon)

    * [MRM-694] - Virtual repositories or repository grouping

    * [MRM-730] - Index/Search by class, method or package name

    * [MRM-751] - Support database connection pooling

    * [MRM-774] - Support inclusion of pom file when deploying an artifact via the web upload form

    * [MRM-864] - Searching within search results

** Task

    * [MRM-677] - Upgrade archiva to the latest redback (1.0.1)

    * [MRM-688] - Replace plexus-runtime with standalone jetty bundle

    * [MRM-708] - Migrate from Plexus Logging to Slf4J

    * [MRM-754] - Update the screenshots in the docs
    
  The full list of changes can be found {{{http://jira.codehaus.org/secure/ReleaseNote.jspa?version=13861&styleName=Text&projectId=10980} in JIRA}}.

* Changes in Archiva 1.0.2

** Bug

    * [MRM-159] - should not respond with a 404 if proxying a file results in a remote error

    * [MRM-532] - Unable to specify the location of the index files through the web ui

    * [MRM-598] - Validation error on new repository creation and other fields under certain conditions

    * [MRM-608] - Unable to find project model for  [...] if the initial import of the POM failed

    * [MRM-617] - Reporting does not work due to bug in client-side JavaScript validation

    * [MRM-618] - PLEXUS_BASE does not work for local databases

    * [MRM-622] - database not being updated with project model information

    * [MRM-626] - ClassCastException when saving proxy connector with property defined

    * [MRM-627] - Archiva doesn't download SNAPSHOTs for proxied repositories.

    * [MRM-631] - network proxy is always used when defined

    * [MRM-642] - archiva-common tests rely on relative paths

    * [MRM-655] - The logs are duplicated in the archiva.log and wrapper.log file.

    * [MRM-659] - archiva cannot serve ejb artifacts from a maven1 repository

    * [MRM-661] - remote repository removals are not saved after restart

    * [MRM-664] - Cannot download a strut-module artifact in a Legacy repository

    * [MRM-674] - LayoutException when downloading SNAPSHOT test-sources

    * [MRM-683] - Archiva version missing from pages and logs

    * [MRM-687] - Project model cannot be added to database if it inherits groupId and/or version from parent POM

    * [MRM-689] - Incorrect war name in example for tomcat

    * [MRM-690] - using undefined appserver.base

    * [MRM-691] - Can't get any of the consumers to work without through a NPE

    * [MRM-701] - Buggy documentation on "separating the base from the installation"

    * [MRM-703] - Artifacts with extensions longer than fours characters breaks repository scanning.

    * [MRM-713] - extensionPattern in FilenameParser is incorrect

    * [MRM-715] - error adding artifacts to Lucene under some circumstances

    * [MRM-719] - NPE during repository scan

    * [MRM-725] - /archiva/browse URL does not work on WebSphere

    * [MRM-727] - Archiva does not download plugin artifacts in Geronimo

    * [MRM-734] - Unable to update metadata - No versions found for reference 

    * [MRM-746] - unable to include *.xml in artifacts list as it picks up maven-metadata.xml

    * [MRM-750] - Adding a network proxy doesn't require an identifier

    * [MRM-755] - No content type for .pom files denoted in file "archiva-mime-types.txt" - workaround included

    * [MRM-758] - unable to schedule cron expressions that contain a comma

    * [MRM-761] - Exception when trying to retrieve a Maven 1 artifact of type zip

    * [MRM-762] - Footer doesn't stretch across repositoryScanning and database pages

    * [MRM-763] - Default cron expression for database update is invalid

    * [MRM-764] - default policies are not selected in the add proxy connector page

** Improvement

    * [MRM-504] - Find Artifact page needs more onscreen information/instructions

    * [MRM-656] - Admin guide for installing WAR needs updating

    * [MRM-666] - Edit Managed Repository page should indicate the repo id being edited

    * [MRM-700] - Review the documentation on deploying to Archiva for inconsistent repository ids

    * [MRM-720] - Upgrade Lucene from 2.0 to 2.3.1

* Changes in Archiva 1.0.1

** Bug

  * [MRM-623] - find artifact self signed certificate will expire soon

  * [MRM-628] - In the audit.log file the userid for each action is guest, even though the deploy was performed by admin

  * [MRM-630] - http 502 proxy error with browse button after 2 days running

  * [MRM-633] - Logging is too verbose

  * [MRM-646] - Documentation for configuring for Tomcat is invalid

  * [MRM-662] - Repo purge is not deleting artifacts in correct order

  * [MRM-668] - Repo browse and search isn't working in trunk and in archiva 1.0.1 release candidate

  * [MRM-670] - legacy artifact mapping form needs better validation

** Improvement

  * [MRM-594] - add some minimal hook in LegacyPathParser to allow exception management in artifact resolution

** Task

  * [MRM-619] - Update docs/site for some corrections

