 -----
 Release Notes for Archiva 1.1.4
 -----

Release Notes for Archiva 1.1.4

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

  The Archiva 1.1.4 release fixes a blocker issue for handling maven-metadata.xml files generated by Maven 2.1. The issue affects proxying of
  artifacts deployed in a remote repository via Maven 2.1 and users are encouraged to upgrade.

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

** Bug

    * [MRM-1152] - Fix for MRM-1136 needs to be backported for 1.1.x 

* 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

