Modified: 
maven/website/content/archives/maven-2.x/maven-2.1-architectural-goals.html
==============================================================================
--- maven/website/content/archives/maven-2.x/maven-2.1-architectural-goals.html 
(original)
+++ maven/website/content/archives/maven-2.x/maven-2.1-architectural-goals.html 
Sat May 11 11:53:23 2024
@@ -2,14 +2,14 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0-M10 from 
content/apt/archives/maven-2.x/maven-2.1-architectural-goals.apt at 2024-05-11
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M18 from 
content/apt/archives/maven-2.x/maven-2.1-architectural-goals.apt at 2024-05-11
  | Rendered using Apache Maven Fluido Skin 2.0.0-M6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M10" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M18" />
     <title>Maven</title>
     <link rel="stylesheet" 
href="../../css/apache-maven-fluido-2.0.0-M6.min.css" />
     <link rel="stylesheet" href="../../css/site.css" />
@@ -37,8 +37,10 @@
     <div class="container-fluid">
       <header>
         <div id="banner">
-          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><img src="../../images/apache-maven-project.png"  alt="Apache 
Maven Site" style="" /></a></div>
-          <div class="pull-right"><a href="../.././" id="bannerRight"><img 
src="../../images/maven-logo-black-on-white.png"  alt="" style="" /></a></div>
+          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><h1>Apache Maven Site</h1>
+</a></div>
+          <div class="pull-right"><a href="../.././" 
id="bannerRight"><h1>$esc.xml( $banner.name )</h1>
+</a></div>
           <div class="clear"><hr/></div>
         </div>
 
@@ -127,71 +129,71 @@
           </div>
         </header>
         <main id="bodyColumn"  class="span10" >
-<section>
-<h1>h1. Maven 2.1 -- Jason van Zyl</h1></section><section>
-<h1>Discussion: need some answers to these before even pushing this to the 
list TODO: Jesse and Greg spent a lot of time getting the async SSL working so 
a little description this work would be useful TODO: architecture document 
about Mercury transport as the async HTTP/DAV client TODO: example of user 
facing API for Mercury TODO: architecture document and spec for mercury 
(largely in the wiki) TODO: example of user facing API for maven-shared-model 
TODO: architecture document on maven itself, plugin manager, lifecycle 
executor, profile construction TODO: check with kenney to see if his work 
survived in substituting components or if it's his work that's actually making 
it work</h1></section><section>
-<h1>Technical Preparation: not necessary before discussions can start but 
helpful to help guide how we concretely determine backward compat TODO: get an 
explanation of the process Arnaud and Benjamin have for plugins. I started by 
capturing the log TODO: document standard setup for Hudson we have so people 
can see the results of testing TODO: setup hudson with emma for code coverage 
and ask VELO to help us setup coverage for integration 
tests</h1></section><section>
-<h1>h2. Architectural Goals</h1></section><section>
-<h1>h3. Backward Compatibility</h1></section><section>
-<h1>We must ensure that plugins and reports written against the Maven 2.0.x 
APIs remain to work in 2.1. We don't want people to have to rewrite their 
plugins. There are several plugins that are using the current artifact 
resolution code that will not be supported (please see the Mercury section 
below). The ones that are in our control we can port over to use Mercury, and 
external users will have to deal with the major version change. Most people 
will not be affected and Mercury will be a far better 
solution.</h1></section><section>
-<h1>We must also ensure that POMs of version 4.0.0 are supported in 2.1.x 
along with the behavior currently experienced. We are relying heavily on our 
integrations tests right now but as we move forward the work that Shane is 
doing on the project builder with maven-shared-model will help us to 
accommodate different versions of a POM, and different formats we decide to 
support. The maven-shared-model code has no limitation to formats of XML, or 
any of format like YAML, script, or anything else anyone can dream up. These 
implementations may find use outside of Maven. For example someone might build 
something with the Maven Embedder, JRuby, and Mercury to create a JRuby-based 
system. The same could be done for Groovy, or Intercal.</h1></section><section>
-<h1>h2. Plugin and Extension Loading</h1></section><section>
-<h1>Maven's mechanisms for loading plugins and build extensions has been 
refactored. You can find more information in the [Maven 2.1 Plugin and 
Extension Loading Design] document.</h1></section><section>
-<h1>h2. Lifecycle</h1></section><section>
-<h1>h3. Aggregator Mojo Handling</h1></section><section>
-<h1>Aggregator mojos bound to the lifecycle have been deprecated. This 
practice can produce some very strange results, and isn't really the right 
solution for many of the problems it attempts to solve. I'm hoping to include 
some better options for bracketing the normal build - both before, and after, 
explicitly - to make aggregator mojos obsolete, but for now they've been 
deprecated to avoid disrupting backward compatibility.</h1></section><section>
-<h1>Also, aggregator mojos that *are* bound to the lifecycle will only be 
allowed to execute at most once during the build, to limit redundant execution. 
These mojos are meant to act on all projects in the reactor at once, and 
binding them to one pom.xml file is dangerous in that it can produce different 
build results depending on whether that pom.xml is included. This is further 
complicated if two modules in a reactor configure the same aggregator mojo...in 
which case, it may run multiple times...or, when the aggregator is configured 
in the parent pom, where it will run for each descendant 
module.</h1></section><section>
-<h1>h2. Plugin API</h1></section><section>
+<section><a id="h1._Maven_2.1_--_Jason_van_Zyl"></a>
+<h1>h1. Maven 2.1 -- Jason van Zyl</h1></section><section><a 
id="Discussion.3A_need_some_answers_to_these_before_even_pushing_this_to_the_list_TODO.3A_Jesse_and_Greg_spent_a_lot_of_time_getting_the_async_SSL_working_so_a_little_description_this_work_would_be_useful_TODO.3A_architecture_document_about_Mercury_transport_as_the_async_HTTP.2FDAV_client_TODO.3A_example_of_user_facing_API_for_Mercury_TODO.3A_architecture_document_and_spec_for_mercury_.28largely_in_the_wiki.29_TODO.3A_example_of_user_facing_API_for_maven-shared-model_TODO.3A_architecture_document_on_maven_itself.2C_plugin_manager.2C_lifecycle_executor.2C_profile_construction_TODO.3A_check_with_kenney_to_see_if_his_work_survived_in_substituting_components_or_if_it.27s_his_work_that.27s_actually_making_it_work"></a>
+<h1>Discussion: need some answers to these before even pushing this to the 
list TODO: Jesse and Greg spent a lot of time getting the async SSL working so 
a little description this work would be useful TODO: architecture document 
about Mercury transport as the async HTTP/DAV client TODO: example of user 
facing API for Mercury TODO: architecture document and spec for mercury 
(largely in the wiki) TODO: example of user facing API for maven-shared-model 
TODO: architecture document on maven itself, plugin manager, lifecycle 
executor, profile construction TODO: check with kenney to see if his work 
survived in substituting components or if it's his work that's actually making 
it work</h1></section><section><a 
id="Technical_Preparation.3A_not_necessary_before_discussions_can_start_but_helpful_to_help_guide_how_we_concretely_determine_backward_compat_TODO.3A_get_an_explanation_of_the_process_Arnaud_and_Benjamin_have_for_plugins._I_started_by_capturing_the_log_TODO.3A_document_standard_setup_
 
for_Hudson_we_have_so_people_can_see_the_results_of_testing_TODO.3A_setup_hudson_with_emma_for_code_coverage_and_ask_VELO_to_help_us_setup_coverage_for_integration_tests"></a>
+<h1>Technical Preparation: not necessary before discussions can start but 
helpful to help guide how we concretely determine backward compat TODO: get an 
explanation of the process Arnaud and Benjamin have for plugins. I started by 
capturing the log TODO: document standard setup for Hudson we have so people 
can see the results of testing TODO: setup hudson with emma for code coverage 
and ask VELO to help us setup coverage for integration 
tests</h1></section><section><a id="h2._Architectural_Goals"></a>
+<h1>h2. Architectural Goals</h1></section><section><a 
id="h3._Backward_Compatibility"></a>
+<h1>h3. Backward Compatibility</h1></section><section><a 
id="We_must_ensure_that_plugins_and_reports_written_against_the_Maven_2.0.x_APIs_remain_to_work_in_2.1._We_don.27t_want_people_to_have_to_rewrite_their_plugins._There_are_several_plugins_that_are_using_the_current_artifact_resolution_code_that_will_not_be_supported_.28please_see_the_Mercury_section_below.29._The_ones_that_are_in_our_control_we_can_port_over_to_use_Mercury.2C_and_external_users_will_have_to_deal_with_the_major_version_change._Most_people_will_not_be_affected_and_Mercury_will_be_a_far_better_solution."></a>
+<h1>We must ensure that plugins and reports written against the Maven 2.0.x 
APIs remain to work in 2.1. We don't want people to have to rewrite their 
plugins. There are several plugins that are using the current artifact 
resolution code that will not be supported (please see the Mercury section 
below). The ones that are in our control we can port over to use Mercury, and 
external users will have to deal with the major version change. Most people 
will not be affected and Mercury will be a far better 
solution.</h1></section><section><a 
id="We_must_also_ensure_that_POMs_of_version_4.0.0_are_supported_in_2.1.x_along_with_the_behavior_currently_experienced._We_are_relying_heavily_on_our_integrations_tests_right_now_but_as_we_move_forward_the_work_that_Shane_is_doing_on_the_project_builder_with_maven-shared-model_will_help_us_to_accommodate_different_versions_of_a_POM.2C_and_different_formats_we_decide_to_support._The_maven-shared-model_code_has_no_limitation_to_formats_of_XML.2C_or_any_o
 
f_format_like_YAML.2C_script.2C_or_anything_else_anyone_can_dream_up._These_implementations_may_find_use_outside_of_Maven._For_example_someone_might_build_something_with_the_Maven_Embedder.2C_JRuby.2C_and_Mercury_to_create_a_JRuby-based_system._The_same_could_be_done_for_Groovy.2C_or_Intercal."></a>
+<h1>We must also ensure that POMs of version 4.0.0 are supported in 2.1.x 
along with the behavior currently experienced. We are relying heavily on our 
integrations tests right now but as we move forward the work that Shane is 
doing on the project builder with maven-shared-model will help us to 
accommodate different versions of a POM, and different formats we decide to 
support. The maven-shared-model code has no limitation to formats of XML, or 
any of format like YAML, script, or anything else anyone can dream up. These 
implementations may find use outside of Maven. For example someone might build 
something with the Maven Embedder, JRuby, and Mercury to create a JRuby-based 
system. The same could be done for Groovy, or 
Intercal.</h1></section><section><a id="h2._Plugin_and_Extension_Loading"></a>
+<h1>h2. Plugin and Extension Loading</h1></section><section><a 
id="Maven.27s_mechanisms_for_loading_plugins_and_build_extensions_has_been_refactored._You_can_find_more_information_in_the_.5BMaven_2.1_Plugin_and_Extension_Loading_Design.5D_document."></a>
+<h1>Maven's mechanisms for loading plugins and build extensions has been 
refactored. You can find more information in the [Maven 2.1 Plugin and 
Extension Loading Design] document.</h1></section><section><a 
id="h2._Lifecycle"></a>
+<h1>h2. Lifecycle</h1></section><section><a 
id="h3._Aggregator_Mojo_Handling"></a>
+<h1>h3. Aggregator Mojo Handling</h1></section><section><a 
id="Aggregator_mojos_bound_to_the_lifecycle_have_been_deprecated._This_practice_can_produce_some_very_strange_results.2C_and_isn.27t_really_the_right_solution_for_many_of_the_problems_it_attempts_to_solve._I.27m_hoping_to_include_some_better_options_for_bracketing_the_normal_build_-_both_before.2C_and_after.2C_explicitly_-_to_make_aggregator_mojos_obsolete.2C_but_for_now_they.27ve_been_deprecated_to_avoid_disrupting_backward_compatibility."></a>
+<h1>Aggregator mojos bound to the lifecycle have been deprecated. This 
practice can produce some very strange results, and isn't really the right 
solution for many of the problems it attempts to solve. I'm hoping to include 
some better options for bracketing the normal build - both before, and after, 
explicitly - to make aggregator mojos obsolete, but for now they've been 
deprecated to avoid disrupting backward 
compatibility.</h1></section><section><a 
id="Also.2C_aggregator_mojos_that_.2Aare.2A_bound_to_the_lifecycle_will_only_be_allowed_to_execute_at_most_once_during_the_build.2C_to_limit_redundant_execution._These_mojos_are_meant_to_act_on_all_projects_in_the_reactor_at_once.2C_and_binding_them_to_one_pom.xml_file_is_dangerous_in_that_it_can_produce_different_build_results_depending_on_whether_that_pom.xml_is_included._This_is_further_complicated_if_two_modules_in_a_reactor_configure_the_same_aggregator_mojo...in_which_case.2C_it_may_run_multiple_times...or.2C_when_the_aggregator_
 
is_configured_in_the_parent_pom.2C_where_it_will_run_for_each_descendant_module."></a>
+<h1>Also, aggregator mojos that *are* bound to the lifecycle will only be 
allowed to execute at most once during the build, to limit redundant execution. 
These mojos are meant to act on all projects in the reactor at once, and 
binding them to one pom.xml file is dangerous in that it can produce different 
build results depending on whether that pom.xml is included. This is further 
complicated if two modules in a reactor configure the same aggregator mojo...in 
which case, it may run multiple times...or, when the aggregator is configured 
in the parent pom, where it will run for each descendant 
module.</h1></section><section><a id="h2._Plugin_API"></a>
+<h1>h2. Plugin API</h1></section><section><a 
id="h3._Shading_of_plexus-utils_causing_a_ClassCastException_on_plugin.getConfiguration.28.29_.28.5BMNG-3012.7Chttp.3A.2F.2Fjira.codehaus.org.2Fbrowse.2FMNG-3012.5D.29"></a>
 <h1>h3. Shading of plexus-utils causing a ClassCastException on 
plugin.getConfiguration() 
([MNG-3012|http://jira.codehaus.org/browse/MNG-3012])</h1>
-<p>The fact that plexus-utils is hidden from plugins in the newer releases of 
Maven means that plugin.getConfiguration() from maven-model can cause a 
ClassCastException, if used from within a mojo. The plan to fix this is 
basically just to import Xpp3Dom from the shaded plexus-utils version in 
maven-core within the plugin's classrealm. This should allow us to share the 
same instance of that class (only, shouldn't really affect other p-u classes) 
and preserve backward compatibility for existing plugin 
releases.</p></section><section>
-<h1>comment from kenney: The problem with this is that it's a hack. If 
xpp3dom/plexus utils is updated and the plugin requires the new xpp3dom class, 
which has a new method for instance, this will break the 
plugin.</h1></section><section>
-<h1>About this specific issue (MNG-3012): The best solution is to only share 
java., javax., and core maven api classes, so we can no longer export anything 
outside the plugin api (which includes maven-model, maven-project, 
maven-settings e.a.). This would require to phase out plugin.getConfiguration() 
and other model methods that return xpp3dom classes, and let them return 
interfaces present in the maven core api. Those interfaces would have an 
implementation class that implements both that interface and extends xpp3dom, 
which will be hidden for the plugin. Another solution could be to use 
xmlplexusconfiguration</h1></section><section>
-<h1>There's one more solution to consider; using ASM to rewrite plugins as 
they're loaded. We could add code modifiers that workaround incompatibilities 
by detecting usage patterns, like (Xpp3Dom) plugin.getConfiguration(). An 
example could be to modify the code to wrap Xpp3DomParser.parse( new 
StringReader( String.valueOf( /plugin.getConfiguration()/ ) ) ) around the 
call. This is even more of a hack though. Perhaps a mojo that scans for plugin 
incompatibilities using ASM is more feasible (no code 
modification).</h1></section><section>
-<h1>So the basic problem we're up against is that there can be core api 
changes between major versions that pose incompatibilities for plugins written 
against an older version. The simplest solution would be to let plugins specify 
the maven versions they work against (which is partly present: 
<i>requires</i><i>mavenVersion</i>2.0.6<i>/mavenVersion</i><i>/requires</i>. If 
this field supports a versionrange, or we'd default the version interpretation 
above to mean [2.0.6,2.1), we can detect plugins that won't run. The shading 
mentioned above is solving only one incompatibility problem, and there are 
bound to be more. Maybe we even need 2 versions of a plugin at some point, 
targeted toward different maven versions, though I'd really like to avoid that. 
But we cannot just assume our 2.0 plugin api will never change across 'major' 
(read: minor) releases.</h1></section><section>
-<h1>h3. Strategies for ensuring backward compatibility</h1><section>
+<p>The fact that plexus-utils is hidden from plugins in the newer releases of 
Maven means that plugin.getConfiguration() from maven-model can cause a 
ClassCastException, if used from within a mojo. The plan to fix this is 
basically just to import Xpp3Dom from the shaded plexus-utils version in 
maven-core within the plugin's classrealm. This should allow us to share the 
same instance of that class (only, shouldn't really affect other p-u classes) 
and preserve backward compatibility for existing plugin 
releases.</p></section><section><a 
id="comment_from_kenney.3A_The_problem_with_this_is_that_it.27s_a_hack._If_xpp3dom.2Fplexus_utils_is_updated_and_the_plugin_requires_the_new_xpp3dom_class.2C_which_has_a_new_method_for_instance.2C_this_will_break_the_plugin."></a>
+<h1>comment from kenney: The problem with this is that it's a hack. If 
xpp3dom/plexus utils is updated and the plugin requires the new xpp3dom class, 
which has a new method for instance, this will break the 
plugin.</h1></section><section><a 
id="About_this_specific_issue_.28MNG-3012.29.3A_The_best_solution_is_to_only_share_java..2C_javax..2C_and_core_maven_api_classes.2C_so_we_can_no_longer_export_anything_outside_the_plugin_api_.28which_includes_maven-model.2C_maven-project.2C_maven-settings_e.a..29._This_would_require_to_phase_out_plugin.getConfiguration.28.29_and_other_model_methods_that_return_xpp3dom_classes.2C_and_let_them_return_interfaces_present_in_the_maven_core_api._Those_interfaces_would_have_an_implementation_class_that_implements_both_that_interface_and_extends_xpp3dom.2C_which_will_be_hidden_for_the_plugin._Another_solution_could_be_to_use_xmlplexusconfiguration"></a>
+<h1>About this specific issue (MNG-3012): The best solution is to only share 
java., javax., and core maven api classes, so we can no longer export anything 
outside the plugin api (which includes maven-model, maven-project, 
maven-settings e.a.). This would require to phase out plugin.getConfiguration() 
and other model methods that return xpp3dom classes, and let them return 
interfaces present in the maven core api. Those interfaces would have an 
implementation class that implements both that interface and extends xpp3dom, 
which will be hidden for the plugin. Another solution could be to use 
xmlplexusconfiguration</h1></section><section><a 
id="There.27s_one_more_solution_to_consider.3B_using_ASM_to_rewrite_plugins_as_they.27re_loaded._We_could_add_code_modifiers_that_workaround_incompatibilities_by_detecting_usage_patterns.2C_like_.28Xpp3Dom.29_plugin.getConfiguration.28.29._An_example_could_be_to_modify_the_code_to_wrap_Xpp3DomParser.parse.28_new_StringReader.28_String.valueOf.28_.2F
 
plugin.getConfiguration.28.29.2F_.29_.29_.29_around_the_call._This_is_even_more_of_a_hack_though._Perhaps_a_mojo_that_scans_for_plugin_incompatibilities_using_ASM_is_more_feasible_.28no_code_modification.29."></a>
+<h1>There's one more solution to consider; using ASM to rewrite plugins as 
they're loaded. We could add code modifiers that workaround incompatibilities 
by detecting usage patterns, like (Xpp3Dom) plugin.getConfiguration(). An 
example could be to modify the code to wrap Xpp3DomParser.parse( new 
StringReader( String.valueOf( /plugin.getConfiguration()/ ) ) ) around the 
call. This is even more of a hack though. Perhaps a mojo that scans for plugin 
incompatibilities using ASM is more feasible (no code 
modification).</h1></section><section><a 
id="So_the_basic_problem_we.27re_up_against_is_that_there_can_be_core_api_changes_between_major_versions_that_pose_incompatibilities_for_plugins_written_against_an_older_version._The_simplest_solution_would_be_to_let_plugins_specify_the_maven_versions_they_work_against_.28which_is_partly_present.3A_requiresmavenVersion2.0.6.2FmavenVersion.2Frequires._If_this_field_supports_a_versionrange.2C_or_we.27d_default_the_version_interpretation_above_to_mean
 
_.5B2.0.6.2C2.1.29.2C_we_can_detect_plugins_that_won.27t_run._The_shading_mentioned_above_is_solving_only_one_incompatibility_problem.2C_and_there_are_bound_to_be_more._Maybe_we_even_need_2_versions_of_a_plugin_at_some_point.2C_targeted_toward_different_maven_versions.2C_though_I.27d_really_like_to_avoid_that._But_we_cannot_just_assume_our_2.0_plugin_api_will_never_change_across_.27major.27_.28read.3A_minor.29_releases."></a>
+<h1>So the basic problem we're up against is that there can be core api 
changes between major versions that pose incompatibilities for plugins written 
against an older version. The simplest solution would be to let plugins specify 
the maven versions they work against (which is partly present: 
<i>requires</i><i>mavenVersion</i>2.0.6<i>/mavenVersion</i><i>/requires</i>. If 
this field supports a versionrange, or we'd default the version interpretation 
above to mean [2.0.6,2.1), we can detect plugins that won't run. The shading 
mentioned above is solving only one incompatibility problem, and there are 
bound to be more. Maybe we even need 2 versions of a plugin at some point, 
targeted toward different maven versions, though I'd really like to avoid that. 
But we cannot just assume our 2.0 plugin api will never change across 'major' 
(read: minor) releases.</h1></section><section><a 
id="h3._Strategies_for_ensuring_backward_compatibility"></a>
+<h1>h3. Strategies for ensuring backward compatibility</h1><section><a 
id="Plugin_integration_testing"></a>
 <h2>Plugin integration testing</h2></section></section><section>
-<h1><a id="code">code</a> jason: so when you and benjamin went through the 
tests you have &quot;integration-tests&quot; as the standard hook in the plugin 
build to grab on to? [07:59am] jason: why is the activator a property negation? 
why don't you just run in hudson with -Pintegration-tests? [08:02am] jason: i 
want to document what you and benjamin have done as a strategy for ensuring 
backward compatibility [08:03am] ltheussl left the chat room. (Client closed 
connection) [08:04am] aheritier: I started with this idea to have an additional 
profile that we activate with a property like integration-tests=true [08:05am] 
jason: yah, i think -Pintegration-tests=true in a schedule in hudson is fine 
[08:05am] jason: don't think the skip property is necessary [08:05am] bentmann 
joined the chat room. [08:05am] aheritier: but others showed me that he major 
part of existing integration tests were activated with skipTests ! true 
[08:05am] aheritier: I asked why [08:05am] aheritier: they said it
  was to be sure to launch it by default [08:06am] aheritier: but to have the 
possibility to deactivate them if we skip tests [08:06am] jason: sure, so by 
default they run [08:07am] aheritier: yes. [08:07am] aheritier: I prefer to 
activate them if I want [08:07am] jason: yes [08:07am] aheritier: not to have 
them always [08:07am] jason: i agree that should be the pattern [08:07am] 
aheritier: it's too long [08:07am] jason: a smoke test in one mode [08:07am] 
jason: and then turn them all on in hudson [08:07am] aheritier: it's why we 
invented CI servers [08:07am] aheritier: yes [08:07am] eu left the chat room. 
(Ping timeout) [08:08am] jason: i will document the setup but you and ben 
should figure out the pattern you want for a given plugin test [08:08am] jason: 
and i'll document this as a strategy for testing 2.1 [08:08am] eu joined the 
chat room. [08:08am] ekuleshov is now known as eu. [08:08am] jason: as i would 
like to take your setup, and parameterize the version of maven [08:08am] j
 ason: so when some changes are made in 2.1 i'll run the plugin smoke test 
first [08:09am] jason: make sure nothing we change in the apis or hooks is 
screwed up [08:09am] jason: and then run the ITs to make sure those plugins are 
working [08:09am] jason: i already know a handful that are not working 
[08:09am] bentmann: jason: How exactly do you intend to parametrize the Maven 
version? As far as I see, you only need to run them with the Maven of your 
choice. [08:10am] jason: by taking the existing build, read the job, and change 
the version [08:10am] jason: i have tools for reading/writing jobs [08:10am] 
jason: but even low tech cloning the job and changing the maven installation 
[08:10am] bentmann: So the parametrization is limited to the Hudson job config, 
right? [08:11am] jason: actually you could parameterize anything if you control 
the job reading/writing [08:11am] eu left the chat room. (Ping timeout) 
[08:11am] jason: but this is something kohsuke added himself about a week ago 
 [08:11am] jason: in hudson itself [08:11am] jason: i will create a set of 
parameters to test old/new versions of maven with a given set of plugins 
[08:12am] jason: this is a great start, we couldn't do it if the plugins didn't 
have the same hook [08:12am] jason: so all the maven plugin builds now have 
&quot;integration-tests&quot; profiles? [08:12am] bentmann: Well, not all, only 
those that ITs before. [08:12am] ekuleshov joined the chat room. [08:12am] 
veleno left the chat room. (veleno) [08:13am] jason: well that's a start and 
they are at least consistent now [08:13am] ekuleshov is now known as eu. 
[08:13am] jason: which is a great start [08:13am] bentmann: I believe you just 
need to try to setup a Hudson job with Maven 2.1 to build 
&quot;maven-plugins&quot; and see what's missing in terms of config [08:14am] 
jason: not sure what you mean [08:14am] bentmann: IIRC, both Invoker and Shitty 
were picking up the maven.home from the currently running Maven, so the ITs 
should inherit tha
 t [08:14am] jason: also, do you guys have a quick way to tell what plugins 
don't have ITs? [08:14am] bentmann: Seach for src/it... [08:15am] jason: yes, i 
want to make more a report but i can do that [08:15am] jason: so anything that 
does have ITs you guys have made consistent? [08:15am] jason: yes? [08:15am] 
bentmann: Not sure what kind of consistency you actually require [08:16am] 
bentmann: The IT profile should be named equal for all of them [08:16am] 
bentmann: by inheriting from the parent [08:16am] i386_ left the chat room. 
(i386_) [08:16am] bentmann: whether the are run by Invoker or Shitty shouldn't 
matter, I guess [08:17am] jason: no, the actual project just needs a profile 
name the same. not taken from the parent but stated in the project itself 
[08:17am] jason: though the parent could specify that profile which just echos 
&quot;No ITs&quot; [08:17am] jason: so in a run we would know which plugins 
don't have ITs at all [08:17am] bentmann: Ah, I see [08:17am] jason: so i can
  try what i want and that's a great start [08:18am] jason: if our plugins 
don't all have ITs i cannot reasonably test 2.1 [08:18am] jason: and any 
discussion about compatibility is pointless until that's done <a 
id="code">code</a></h1></section><section>
-<h1>h3. POM changes</h1></section><section>
-<h1>There are many changes that users have requested in the POM, in addition 
to wholesale formatting changes. Acommodating these requests is a little tricky 
because we need to support different versions simultaneously so that if 
projecta A builds with 2.0.x, project B can consume the project A POM using 
2.1.x. We just need some way to easy support multiple versions and support 
mediation between the different versions.</h1><section>
-<h2>Tags: loose categorization people to use to help categorize as they see 
fit * Categories: more standard categories that form over time by using 
category structures that exist or common tags that are used so often they 
become categories * Dendency excludes: being to transitively exclude a 
dependency * Properties on dependencies * Specification Dependencies * 
Schematron/RelaxNG descriptor for each plugin -- Bryon Jacob proposed a 
flexible model but XSD is hard to fight here so I'm not sure how far this will 
go</h2></section></section><section>
-<h1>h3. Embedding</h1></section><section>
-<h1>Full embedding of the Maven core is a major feature of the 2.1.x line. The 
embedder was created primarily for IDE integration and is now being consumed by 
m2eclipse, Mevenide and IDEA, but the embedder is also used by the Maven CLI to 
ensure parity between IDEs and the CLI as much as possible. To understand how 
the embedder work you can refer to the [Maven Embedder 
documentation|http://maven.apache.org/guides/mini/guide-embedding-m2.html].</h1></section><section>
-<h1>h3. Custom Components</h1></section><section>
-<h1>As discussed in [Substituting of Custom 
Components|http://docs.codehaus.org/display/MAVEN/Substitution+of+Custom+Maven+Components]
 we now have two ways to insert new components into the system.</h1><section>
+<h1><a id="code">code</a> jason: so when you and benjamin went through the 
tests you have &quot;integration-tests&quot; as the standard hook in the plugin 
build to grab on to? [07:59am] jason: why is the activator a property negation? 
why don't you just run in hudson with -Pintegration-tests? [08:02am] jason: i 
want to document what you and benjamin have done as a strategy for ensuring 
backward compatibility [08:03am] ltheussl left the chat room. (Client closed 
connection) [08:04am] aheritier: I started with this idea to have an additional 
profile that we activate with a property like integration-tests=true [08:05am] 
jason: yah, i think -Pintegration-tests=true in a schedule in hudson is fine 
[08:05am] jason: don't think the skip property is necessary [08:05am] bentmann 
joined the chat room. [08:05am] aheritier: but others showed me that he major 
part of existing integration tests were activated with skipTests ! true 
[08:05am] aheritier: I asked why [08:05am] aheritier: they said it
  was to be sure to launch it by default [08:06am] aheritier: but to have the 
possibility to deactivate them if we skip tests [08:06am] jason: sure, so by 
default they run [08:07am] aheritier: yes. [08:07am] aheritier: I prefer to 
activate them if I want [08:07am] jason: yes [08:07am] aheritier: not to have 
them always [08:07am] jason: i agree that should be the pattern [08:07am] 
aheritier: it's too long [08:07am] jason: a smoke test in one mode [08:07am] 
jason: and then turn them all on in hudson [08:07am] aheritier: it's why we 
invented CI servers [08:07am] aheritier: yes [08:07am] eu left the chat room. 
(Ping timeout) [08:08am] jason: i will document the setup but you and ben 
should figure out the pattern you want for a given plugin test [08:08am] jason: 
and i'll document this as a strategy for testing 2.1 [08:08am] eu joined the 
chat room. [08:08am] ekuleshov is now known as eu. [08:08am] jason: as i would 
like to take your setup, and parameterize the version of maven [08:08am] j
 ason: so when some changes are made in 2.1 i'll run the plugin smoke test 
first [08:09am] jason: make sure nothing we change in the apis or hooks is 
screwed up [08:09am] jason: and then run the ITs to make sure those plugins are 
working [08:09am] jason: i already know a handful that are not working 
[08:09am] bentmann: jason: How exactly do you intend to parametrize the Maven 
version? As far as I see, you only need to run them with the Maven of your 
choice. [08:10am] jason: by taking the existing build, read the job, and change 
the version [08:10am] jason: i have tools for reading/writing jobs [08:10am] 
jason: but even low tech cloning the job and changing the maven installation 
[08:10am] bentmann: So the parametrization is limited to the Hudson job config, 
right? [08:11am] jason: actually you could parameterize anything if you control 
the job reading/writing [08:11am] eu left the chat room. (Ping timeout) 
[08:11am] jason: but this is something kohsuke added himself about a week ago 
 [08:11am] jason: in hudson itself [08:11am] jason: i will create a set of 
parameters to test old/new versions of maven with a given set of plugins 
[08:12am] jason: this is a great start, we couldn't do it if the plugins didn't 
have the same hook [08:12am] jason: so all the maven plugin builds now have 
&quot;integration-tests&quot; profiles? [08:12am] bentmann: Well, not all, only 
those that ITs before. [08:12am] ekuleshov joined the chat room. [08:12am] 
veleno left the chat room. (veleno) [08:13am] jason: well that's a start and 
they are at least consistent now [08:13am] ekuleshov is now known as eu. 
[08:13am] jason: which is a great start [08:13am] bentmann: I believe you just 
need to try to setup a Hudson job with Maven 2.1 to build 
&quot;maven-plugins&quot; and see what's missing in terms of config [08:14am] 
jason: not sure what you mean [08:14am] bentmann: IIRC, both Invoker and Shitty 
were picking up the maven.home from the currently running Maven, so the ITs 
should inherit tha
 t [08:14am] jason: also, do you guys have a quick way to tell what plugins 
don't have ITs? [08:14am] bentmann: Seach for src/it... [08:15am] jason: yes, i 
want to make more a report but i can do that [08:15am] jason: so anything that 
does have ITs you guys have made consistent? [08:15am] jason: yes? [08:15am] 
bentmann: Not sure what kind of consistency you actually require [08:16am] 
bentmann: The IT profile should be named equal for all of them [08:16am] 
bentmann: by inheriting from the parent [08:16am] i386_ left the chat room. 
(i386_) [08:16am] bentmann: whether the are run by Invoker or Shitty shouldn't 
matter, I guess [08:17am] jason: no, the actual project just needs a profile 
name the same. not taken from the parent but stated in the project itself 
[08:17am] jason: though the parent could specify that profile which just echos 
&quot;No ITs&quot; [08:17am] jason: so in a run we would know which plugins 
don't have ITs at all [08:17am] bentmann: Ah, I see [08:17am] jason: so i can
  try what i want and that's a great start [08:18am] jason: if our plugins 
don't all have ITs i cannot reasonably test 2.1 [08:18am] jason: and any 
discussion about compatibility is pointless until that's done <a 
id="code">code</a></h1></section><section><a id="h3._POM_changes"></a>
+<h1>h3. POM changes</h1></section><section><a 
id="There_are_many_changes_that_users_have_requested_in_the_POM.2C_in_addition_to_wholesale_formatting_changes._Acommodating_these_requests_is_a_little_tricky_because_we_need_to_support_different_versions_simultaneously_so_that_if_projecta_A_builds_with_2.0.x.2C_project_B_can_consume_the_project_A_POM_using_2.1.x._We_just_need_some_way_to_easy_support_multiple_versions_and_support_mediation_between_the_different_versions."></a>
+<h1>There are many changes that users have requested in the POM, in addition 
to wholesale formatting changes. Acommodating these requests is a little tricky 
because we need to support different versions simultaneously so that if 
projecta A builds with 2.0.x, project B can consume the project A POM using 
2.1.x. We just need some way to easy support multiple versions and support 
mediation between the different versions.</h1><section><a 
id="Tags.3A_loose_categorization_people_to_use_to_help_categorize_as_they_see_fit_.2A_Categories.3A_more_standard_categories_that_form_over_time_by_using_category_structures_that_exist_or_common_tags_that_are_used_so_often_they_become_categories_.2A_Dendency_excludes.3A_being_to_transitively_exclude_a_dependency_.2A_Properties_on_dependencies_.2A_Specification_Dependencies_.2A_Schematron.2FRelaxNG_descriptor_for_each_plugin_--_Bryon_Jacob_proposed_a_flexible_model_but_XSD_is_hard_to_fight_here_so_I.27m_not_sure_how_far_this_will_go"></a>
+<h2>Tags: loose categorization people to use to help categorize as they see 
fit * Categories: more standard categories that form over time by using 
category structures that exist or common tags that are used so often they 
become categories * Dendency excludes: being to transitively exclude a 
dependency * Properties on dependencies * Specification Dependencies * 
Schematron/RelaxNG descriptor for each plugin -- Bryon Jacob proposed a 
flexible model but XSD is hard to fight here so I'm not sure how far this will 
go</h2></section></section><section><a id="h3._Embedding"></a>
+<h1>h3. Embedding</h1></section><section><a 
id="Full_embedding_of_the_Maven_core_is_a_major_feature_of_the_2.1.x_line._The_embedder_was_created_primarily_for_IDE_integration_and_is_now_being_consumed_by_m2eclipse.2C_Mevenide_and_IDEA.2C_but_the_embedder_is_also_used_by_the_Maven_CLI_to_ensure_parity_between_IDEs_and_the_CLI_as_much_as_possible._To_understand_how_the_embedder_work_you_can_refer_to_the_.5BMaven_Embedder_documentation.7Chttp.3A.2F.2Fmaven.apache.org.2Fguides.2Fmini.2Fguide-embedding-m2.html.5D."></a>
+<h1>Full embedding of the Maven core is a major feature of the 2.1.x line. The 
embedder was created primarily for IDE integration and is now being consumed by 
m2eclipse, Mevenide and IDEA, but the embedder is also used by the Maven CLI to 
ensure parity between IDEs and the CLI as much as possible. To understand how 
the embedder work you can refer to the [Maven Embedder 
documentation|http://maven.apache.org/guides/mini/guide-embedding-m2.html].</h1></section><section><a
 id="h3._Custom_Components"></a>
+<h1>h3. Custom Components</h1></section><section><a 
id="As_discussed_in_.5BSubstituting_of_Custom_Components.7Chttp.3A.2F.2Fdocs.codehaus.org.2Fdisplay.2FMAVEN.2FSubstitution.2Bof.2BCustom.2BMaven.2BComponents.5D_we_now_have_two_ways_to_insert_new_components_into_the_system."></a>
+<h1>As discussed in [Substituting of Custom 
Components|http://docs.codehaus.org/display/MAVEN/Substitution+of+Custom+Maven+Components]
 we now have two ways to insert new components into the system.</h1><section><a 
id="Using_a_directory_and_specifying_it_in_the_Classworlds_configuration._Tycho_simply_has_a_special_set_of_components_that_load_first_before_the_standard_maven_components_and_they_override_the_standard_Maven_components._Here.27s_the_example_based_on_what_Tycho_is_currently_doing_which_allows_custom_components_to_be_used."></a>
 <h2>Using a directory and specifying it in the Classworlds configuration. 
Tycho simply has a special set of components that load first before the 
standard maven components and they override the standard Maven components. 
Here's the example based on what Tycho is currently doing which allows custom 
components to be used.</h2></section></section><section>
 <h1><a id="code">code</a> main is org.apache.maven.cli.MavenCli from 
plexus.core </h1></section><section>
-<h1>set maven.home default $<a id="user.home">user.home</a>/m2 
</h1><figure><img src="plexus.core" /><figcaption> load $<a 
id="maven.home">maven.home</a>/tycho/*.jar load $<a 
id="maven.home">maven.home</a>/lib/*.jar <a 
id="code">code</a></figcaption></figure><section>
-<h2>The embedder has the ContainerCustomizer which allow you to inject new 
component descriptors. This is used in the IDE integration (m2ecipse, Netbeans) 
for adding custom artifact resolvers.</h2></section></section><section>
-<h1>But what we ultimately need for Tycho is a way to dynamically pull in a 
set of components based on the packaging of a project. In our case with Tycho 
the packaging is maven-osgi-bundle and that should kick in the set of 
components that do builds for OSGi bundles. We also have another use case in 
Tycho where we are building OSGi bundles without a POM and actually using a 
manifest. In this case we need to somehow detect the manifest and then have the 
custom set of components kick in. In the case of Tycho we need a different 
project builder, and artifact resolver.</h1></section><section>
-<h1>h3. Mercury</h1></section><section>
-<h1>Mercury is a replacement for the current Maven Artifact subsystem, and a 
complete replacement for the HTTP and DAV portions of the existing 
transport.</h1></section><section>
-<h1>The primary reasons for replacing the code are that it is unmaintainable 
and nearly impossible to navigate, it uses completely non-standard structures 
and libraries for version calculations, the API is too hard for people to use, 
and it is not given to users to consume as a single componment to use. Users 
are forced to know how several complicated components interact in order to 
implement a mechanism of retrieving artifacts from a repository. The entire 
mechanism needs to be replaced with something that can be maintained and is 
reliable. </h1></section><section>
-<h1>Mercury started as some fixes to Maven Artifact to first help with 
embeddability and error reporting for IDE integration. This was a direct result 
of all IDE integrators having to reimplement the current artifact resolver to 
provide decent feedback to users when errors occured. The artifact subsystem 
would just die and leave the IDE in an unusable state. Milos was the first to 
implement his own artifact resolver, and Eugene soon had to do the same in 
m2eclipse. Oleg and I were also trying to use the current artifact mechanism in 
an embedded mode for some Eclipse plugins and this also proved to be quite 
painful. After the first attempt of removing the fail-fast behavior, Oleg and I 
decided to make a break from the old codebase and attempt to create Mercury 
with the following goals in mind:</h1><section>
-<h2>Find the best people in the world to help create an awesome HTTP and DAV 
implementation. We did this by talking to Greg, Jan, and Jesse who are the 
Jetty folks and there just isn't anyone who knows HTTP better. Greg and Jan are 
awesome, and Jesse is Maven committer so we have some deep understanding of the 
issues involved. So what Oleg and I wanted to see was: ** Easy SSL support 
where mucky with certificates in the default install is not required. ** 
Connection pooling ** Connection parallelization ** Built in DAV client support 
for deployment ** Atomic retrieval: we make sure absolutely everything is been 
safely transported to disk before we place it in the local Maven repository ** 
Atomic deployment: in this case we could only support this using a special 
filter Greg created which blocks requests for any artifacts being deploy in the 
current set until the entire set land safely to disk. So it becomes impossible 
to ask for an artifact that refers to something else in the set b
 efore it is actually available. ** Starting thinking about a client that can 
understand GeoIP. Given the recent spikes in traffic we are going to start 
needing to distribute the load.</h2></section><section>
-<h2>Find the best solution possible solution for dealing with version 
calculations, in particular ranges. For this we called on Daniel Le Berre and 
ask for some help in integrating his SAT4J library. We learned about the SAT4J 
library from the P2 project over at Eclipse.org at the last EclipseCon. SAT4J 
was deemed the best way forward by the P2 team in providing the most reliable, 
and most workable solution for doing version calculation. SAT4J provides ways 
to plug-in strategies to deal with our scopes, conflict resolution strategies 
and it is deadly fast. We felt we are in good company as we can call on Daniel 
and the P2 team and collaborate when difficult problems arise. 
</h2></section><section>
-<h2>Find the best people to help with with security. This might an SSL-based 
solution to secure the channel where the source is known to be safe, a 
PGP-based solution where the contents must be secured assuming a hostile 
channel, or a combination of the two. To that end I have contacted the folks at 
the Legion of the Bouncy Castle and asked them to provide us the expertise to 
implement a safe and correct solution. I have not persued any help on the 
SSL.</h2></section></section><section>
-<h1>So in the end I believe it would be detrimental to use the Maven Artifact 
code in the 2.1.x tree and the change needs to be made to use Mercury before 
the first alpha ships. Oleg and I started this work, and Oleg has subsequently 
worked tirelessly on Mercury along with a great deal of help from Greg, Jan and 
Jesse. I think Oleg understands the requirements as he's seen Maven in action 
in one of the largest development environments in the world and watched how 
Maven can fail spectacularly. </h1></section><section>
-<h1>h3. Plugin API * Symmetric output expressions * Java5 Mojo annotations 
(Yoav Landman has this working already) * Clean separation of plugins from 
reports. It's not good that those are the same thing in the Maven internals. ** 
Not using concrete XML classes in the Plugin API 
(Xpp3Dom)</h1></section><section>
-<h1>h3. Core Refactorings * Project Builder 
([architecture|http://docs.codehaus.org/display/MAVENUSER/Project+Builder]) ** 
Maven shared model work: a new way of reading in the models for Maven that is 
not format dependent in any way i.e. XML, text, YAML, scripts, whatever. ** 
Pluggable model readers: this could leverage different implementations provided 
by the shared model work, but we still need a way to detect the type and 
version of the model that we want to consume ** A new terse format that uses 
attributes ** Automatic parent versioning ** New interpolation component 
(plexus-interpolation) ** Dynamic build sections 
([MNG-3530|http://jira.codehaus.org/browse/MNG-3530]) ** Mixin support -- 
allowing a paramterizable template which can be imported with one 
line.</h1><section>
-<h2>Remove the use of separate plugin repositories. We only need to pull 
resources from one repository. We started doing this but I've had a couple 
clients that want to separate the tools they use from the code they are 
developing/building. * Decouple script-based Plugins from the core -- we are a 
large part of the way here I need to summarize what was done. * Remove Settings 
from the core and make it a user facing configuration (This is primarily done 
-- jason) * Have one configuration model for request * Have one configuration 
model for session: session takes the request in the constructor and delegates * 
Domain logging * Plugin Manager ** Removal of the Plugin Registry (done) -- we 
moved in a direction where people lock down their versions and we've helped by 
putting default versions in the parent POM. ** Load Plugin dependencies into a 
separate ClassRealm (done) ** Plugin Execution Environment: Ability to run any 
version of a plugin where an environment is created which contains
  all the requirements for a particular version of the Plugin API * Lifecycle 
Executor ** Queryable Lifecycle *** The most important change in the embedding 
environment. You can actually query Maven for the complete execution before it 
happens. We must know the entire model of execution before we execute. * 
OSGi-like Classloading to support isolated execution 
environments</h2></section></section><section>
-<h1>h3. Java 5</h1></section><section>
-<h1>Java5 annotations for plugins: we have two implementations that have now 
been merged in plexus-cdc. QDOX 1.7 has now been released so we may want to 
check the source level gleaning again. Jason Dillon has created a working class 
processing model. We need to deal with Plexus components and Maven 
plugins.</h1></section><section>
-<h1>h3. Integration and promotion of scriptable plugins</h1></section><section>
-<h1>h3. Toolchains * Milos has implemented this and Shane had some feedback so 
this needs to be linked together</h1></section><section>
-<h1>h3. Reporting * Report Execution Environment: Ability to run any version 
of a report where an environment is created which contains all the requirements 
for a particular version of the Report API. * Decouple the reporting core. We 
need to get Doxia out of the core. Anything it needs to run should be 
isolated.</h1></section><section>
-<h1>h1. Other Use Cases to Integrate</h1></section><section>
-<h1>h2. Determining project type in Eclipse (Igor 
Fedorenko)</h1></section><section>
-<h1>Support for &quot;java&quot; projects in Eclipse has certain overhead and 
it is desirable to only enable for projects that actually require it. More 
specifically, java maven projects have JRE classpath container, maven classpath 
container, have java-specific UI elements enabled and are offered in various 
java-related searches. Also, tools like WTP and AJDT treat (eclipse) java 
projects specially.</h1></section><section>
-<h1>There is currently no direct way to tell if a (maven) project needs to be 
configured as java project in eclipse. The closest test condition I can think 
off is</h1></section><section>
-<h1>1 the project ArtifactHandler language=java</h1></section><section>
-<h1>and</h1></section><section>
-<h1>2.1 ArtifactHandler addedToClasspath=true</h1></section><section>
-<h1>or</h1></section><section>
-<h1>2.2 MavenProject.getCompileSourceRoots().size() &gt; 
0</h1></section><section>
-<h1>or</h1></section><section>
-<h1>2.3 MavenProject.getTestCompileSourceRoots().size() &gt; 
0</h1></section><section>
-<h1>(in other words the project is java and either itself is added to 
classpath or has sources to compile).</h1></section><section>
-<h1>This test will return false negative for some WAR projects (not added to 
classpath and don't have any sources to compile). Also, compileSourceRoots and 
testCompileSourceRoots only become fully populated after running maven build 
lifecycle, which is expensive.</h1><section>
+<h1>set maven.home default $<a id="user.home">user.home</a>/m2 
</h1><figure><img src="plexus.core" /><figcaption> load $<a 
id="maven.home">maven.home</a>/tycho/*.jar load $<a 
id="maven.home">maven.home</a>/lib/*.jar <a 
id="code">code</a></figcaption></figure><section><a 
id="The_embedder_has_the_ContainerCustomizer_which_allow_you_to_inject_new_component_descriptors._This_is_used_in_the_IDE_integration_.28m2ecipse.2C_Netbeans.29_for_adding_custom_artifact_resolvers."></a>
+<h2>The embedder has the ContainerCustomizer which allow you to inject new 
component descriptors. This is used in the IDE integration (m2ecipse, Netbeans) 
for adding custom artifact resolvers.</h2></section></section><section><a 
id="But_what_we_ultimately_need_for_Tycho_is_a_way_to_dynamically_pull_in_a_set_of_components_based_on_the_packaging_of_a_project._In_our_case_with_Tycho_the_packaging_is_maven-osgi-bundle_and_that_should_kick_in_the_set_of_components_that_do_builds_for_OSGi_bundles._We_also_have_another_use_case_in_Tycho_where_we_are_building_OSGi_bundles_without_a_POM_and_actually_using_a_manifest._In_this_case_we_need_to_somehow_detect_the_manifest_and_then_have_the_custom_set_of_components_kick_in._In_the_case_of_Tycho_we_need_a_different_project_builder.2C_and_artifact_resolver."></a>
+<h1>But what we ultimately need for Tycho is a way to dynamically pull in a 
set of components based on the packaging of a project. In our case with Tycho 
the packaging is maven-osgi-bundle and that should kick in the set of 
components that do builds for OSGi bundles. We also have another use case in 
Tycho where we are building OSGi bundles without a POM and actually using a 
manifest. In this case we need to somehow detect the manifest and then have the 
custom set of components kick in. In the case of Tycho we need a different 
project builder, and artifact resolver.</h1></section><section><a 
id="h3._Mercury"></a>
+<h1>h3. Mercury</h1></section><section><a 
id="Mercury_is_a_replacement_for_the_current_Maven_Artifact_subsystem.2C_and_a_complete_replacement_for_the_HTTP_and_DAV_portions_of_the_existing_transport."></a>
+<h1>Mercury is a replacement for the current Maven Artifact subsystem, and a 
complete replacement for the HTTP and DAV portions of the existing 
transport.</h1></section><section><a 
id="The_primary_reasons_for_replacing_the_code_are_that_it_is_unmaintainable_and_nearly_impossible_to_navigate.2C_it_uses_completely_non-standard_structures_and_libraries_for_version_calculations.2C_the_API_is_too_hard_for_people_to_use.2C_and_it_is_not_given_to_users_to_consume_as_a_single_componment_to_use._Users_are_forced_to_know_how_several_complicated_components_interact_in_order_to_implement_a_mechanism_of_retrieving_artifacts_from_a_repository._The_entire_mechanism_needs_to_be_replaced_with_something_that_can_be_maintained_and_is_reliable."></a>
+<h1>The primary reasons for replacing the code are that it is unmaintainable 
and nearly impossible to navigate, it uses completely non-standard structures 
and libraries for version calculations, the API is too hard for people to use, 
and it is not given to users to consume as a single componment to use. Users 
are forced to know how several complicated components interact in order to 
implement a mechanism of retrieving artifacts from a repository. The entire 
mechanism needs to be replaced with something that can be maintained and is 
reliable. </h1></section><section><a 
id="Mercury_started_as_some_fixes_to_Maven_Artifact_to_first_help_with_embeddability_and_error_reporting_for_IDE_integration._This_was_a_direct_result_of_all_IDE_integrators_having_to_reimplement_the_current_artifact_resolver_to_provide_decent_feedback_to_users_when_errors_occured._The_artifact_subsystem_would_just_die_and_leave_the_IDE_in_an_unusable_state._Milos_was_the_first_to_implement_his_own_artifact_resolver.2C
 
_and_Eugene_soon_had_to_do_the_same_in_m2eclipse._Oleg_and_I_were_also_trying_to_use_the_current_artifact_mechanism_in_an_embedded_mode_for_some_Eclipse_plugins_and_this_also_proved_to_be_quite_painful._After_the_first_attempt_of_removing_the_fail-fast_behavior.2C_Oleg_and_I_decided_to_make_a_break_from_the_old_codebase_and_attempt_to_create_Mercury_with_the_following_goals_in_mind.3A"></a>
+<h1>Mercury started as some fixes to Maven Artifact to first help with 
embeddability and error reporting for IDE integration. This was a direct result 
of all IDE integrators having to reimplement the current artifact resolver to 
provide decent feedback to users when errors occured. The artifact subsystem 
would just die and leave the IDE in an unusable state. Milos was the first to 
implement his own artifact resolver, and Eugene soon had to do the same in 
m2eclipse. Oleg and I were also trying to use the current artifact mechanism in 
an embedded mode for some Eclipse plugins and this also proved to be quite 
painful. After the first attempt of removing the fail-fast behavior, Oleg and I 
decided to make a break from the old codebase and attempt to create Mercury 
with the following goals in mind:</h1><section><a 
id="Find_the_best_people_in_the_world_to_help_create_an_awesome_HTTP_and_DAV_implementation._We_did_this_by_talking_to_Greg.2C_Jan.2C_and_Jesse_who_are_the_Jetty_folks_and_there
 
_just_isn.27t_anyone_who_knows_HTTP_better._Greg_and_Jan_are_awesome.2C_and_Jesse_is_Maven_committer_so_we_have_some_deep_understanding_of_the_issues_involved._So_what_Oleg_and_I_wanted_to_see_was.3A_.2A.2A_Easy_SSL_support_where_mucky_with_certificates_in_the_default_install_is_not_required._.2A.2A_Connection_pooling_.2A.2A_Connection_parallelization_.2A.2A_Built_in_DAV_client_support_for_deployment_.2A.2A_Atomic_retrieval.3A_we_make_sure_absolutely_everything_is_been_safely_transported_to_disk_before_we_place_it_in_the_local_Maven_repository_.2A.2A_Atomic_deployment.3A_in_this_case_we_could_only_support_this_using_a_special_filter_Greg_created_which_blocks_requests_for_any_artifacts_being_deploy_in_the_current_set_until_the_entire_set_land_safely_to_disk._So_it_becomes_impossible_to_ask_for_an_artifact_that_refers_to_something_else_in_the_set_before_it_is_actually_available._.2A.2A_Starting_thinking_about_a_client_that_can_understand_GeoIP._Given_the_recent_spikes_in_traffic_we_ar
 e_going_to_start_needing_to_distribute_the_load."></a>
+<h2>Find the best people in the world to help create an awesome HTTP and DAV 
implementation. We did this by talking to Greg, Jan, and Jesse who are the 
Jetty folks and there just isn't anyone who knows HTTP better. Greg and Jan are 
awesome, and Jesse is Maven committer so we have some deep understanding of the 
issues involved. So what Oleg and I wanted to see was: ** Easy SSL support 
where mucky with certificates in the default install is not required. ** 
Connection pooling ** Connection parallelization ** Built in DAV client support 
for deployment ** Atomic retrieval: we make sure absolutely everything is been 
safely transported to disk before we place it in the local Maven repository ** 
Atomic deployment: in this case we could only support this using a special 
filter Greg created which blocks requests for any artifacts being deploy in the 
current set until the entire set land safely to disk. So it becomes impossible 
to ask for an artifact that refers to something else in the set b
 efore it is actually available. ** Starting thinking about a client that can 
understand GeoIP. Given the recent spikes in traffic we are going to start 
needing to distribute the load.</h2></section><section><a 
id="Find_the_best_solution_possible_solution_for_dealing_with_version_calculations.2C_in_particular_ranges._For_this_we_called_on_Daniel_Le_Berre_and_ask_for_some_help_in_integrating_his_SAT4J_library._We_learned_about_the_SAT4J_library_from_the_P2_project_over_at_Eclipse.org_at_the_last_EclipseCon._SAT4J_was_deemed_the_best_way_forward_by_the_P2_team_in_providing_the_most_reliable.2C_and_most_workable_solution_for_doing_version_calculation._SAT4J_provides_ways_to_plug-in_strategies_to_deal_with_our_scopes.2C_conflict_resolution_strategies_and_it_is_deadly_fast._We_felt_we_are_in_good_company_as_we_can_call_on_Daniel_and_the_P2_team_and_collaborate_when_difficult_problems_arise."></a>
+<h2>Find the best solution possible solution for dealing with version 
calculations, in particular ranges. For this we called on Daniel Le Berre and 
ask for some help in integrating his SAT4J library. We learned about the SAT4J 
library from the P2 project over at Eclipse.org at the last EclipseCon. SAT4J 
was deemed the best way forward by the P2 team in providing the most reliable, 
and most workable solution for doing version calculation. SAT4J provides ways 
to plug-in strategies to deal with our scopes, conflict resolution strategies 
and it is deadly fast. We felt we are in good company as we can call on Daniel 
and the P2 team and collaborate when difficult problems arise. 
</h2></section><section><a 
id="Find_the_best_people_to_help_with_with_security._This_might_an_SSL-based_solution_to_secure_the_channel_where_the_source_is_known_to_be_safe.2C_a_PGP-based_solution_where_the_contents_must_be_secured_assuming_a_hostile_channel.2C_or_a_combination_of_the_two._To_that_end_I_have_contac
 
ted_the_folks_at_the_Legion_of_the_Bouncy_Castle_and_asked_them_to_provide_us_the_expertise_to_implement_a_safe_and_correct_solution._I_have_not_persued_any_help_on_the_SSL."></a>
+<h2>Find the best people to help with with security. This might an SSL-based 
solution to secure the channel where the source is known to be safe, a 
PGP-based solution where the contents must be secured assuming a hostile 
channel, or a combination of the two. To that end I have contacted the folks at 
the Legion of the Bouncy Castle and asked them to provide us the expertise to 
implement a safe and correct solution. I have not persued any help on the 
SSL.</h2></section></section><section><a 
id="So_in_the_end_I_believe_it_would_be_detrimental_to_use_the_Maven_Artifact_code_in_the_2.1.x_tree_and_the_change_needs_to_be_made_to_use_Mercury_before_the_first_alpha_ships._Oleg_and_I_started_this_work.2C_and_Oleg_has_subsequently_worked_tirelessly_on_Mercury_along_with_a_great_deal_of_help_from_Greg.2C_Jan_and_Jesse._I_think_Oleg_understands_the_requirements_as_he.27s_seen_Maven_in_action_in_one_of_the_largest_development_environments_in_the_world_and_watched_how_Maven_can_fail_spectacularly.
 "></a>
+<h1>So in the end I believe it would be detrimental to use the Maven Artifact 
code in the 2.1.x tree and the change needs to be made to use Mercury before 
the first alpha ships. Oleg and I started this work, and Oleg has subsequently 
worked tirelessly on Mercury along with a great deal of help from Greg, Jan and 
Jesse. I think Oleg understands the requirements as he's seen Maven in action 
in one of the largest development environments in the world and watched how 
Maven can fail spectacularly. </h1></section><section><a 
id="h3._Plugin_API_.2A_Symmetric_output_expressions_.2A_Java5_Mojo_annotations_.28Yoav_Landman_has_this_working_already.29_.2A_Clean_separation_of_plugins_from_reports._It.27s_not_good_that_those_are_the_same_thing_in_the_Maven_internals._.2A.2A_Not_using_concrete_XML_classes_in_the_Plugin_API_.28Xpp3Dom.29"></a>
+<h1>h3. Plugin API * Symmetric output expressions * Java5 Mojo annotations 
(Yoav Landman has this working already) * Clean separation of plugins from 
reports. It's not good that those are the same thing in the Maven internals. ** 
Not using concrete XML classes in the Plugin API 
(Xpp3Dom)</h1></section><section><a 
id="h3._Core_Refactorings_.2A_Project_Builder_.28.5Barchitecture.7Chttp.3A.2F.2Fdocs.codehaus.org.2Fdisplay.2FMAVENUSER.2FProject.2BBuilder.5D.29_.2A.2A_Maven_shared_model_work.3A_a_new_way_of_reading_in_the_models_for_Maven_that_is_not_format_dependent_in_any_way_i.e._XML.2C_text.2C_YAML.2C_scripts.2C_whatever._.2A.2A_Pluggable_model_readers.3A_this_could_leverage_different_implementations_provided_by_the_shared_model_work.2C_but_we_still_need_a_way_to_detect_the_type_and_version_of_the_model_that_we_want_to_consume_.2A.2A_A_new_terse_format_that_uses_attributes_.2A.2A_Automatic_parent_versioning_.2A.2A_New_interpolation_component_.28plexus-interpolation.29_.2A.2A_Dynamic_
 
build_sections_.28.5BMNG-3530.7Chttp.3A.2F.2Fjira.codehaus.org.2Fbrowse.2FMNG-3530.5D.29_.2A.2A_Mixin_support_--_allowing_a_paramterizable_template_which_can_be_imported_with_one_line."></a>
+<h1>h3. Core Refactorings * Project Builder 
([architecture|http://docs.codehaus.org/display/MAVENUSER/Project+Builder]) ** 
Maven shared model work: a new way of reading in the models for Maven that is 
not format dependent in any way i.e. XML, text, YAML, scripts, whatever. ** 
Pluggable model readers: this could leverage different implementations provided 
by the shared model work, but we still need a way to detect the type and 
version of the model that we want to consume ** A new terse format that uses 
attributes ** Automatic parent versioning ** New interpolation component 
(plexus-interpolation) ** Dynamic build sections 
([MNG-3530|http://jira.codehaus.org/browse/MNG-3530]) ** Mixin support -- 
allowing a paramterizable template which can be imported with one 
line.</h1><section><a 
id="Remove_the_use_of_separate_plugin_repositories._We_only_need_to_pull_resources_from_one_repository._We_started_doing_this_but_I.27ve_had_a_couple_clients_that_want_to_separate_the_tools_they_use_from_th
 
e_code_they_are_developing.2Fbuilding._.2A_Decouple_script-based_Plugins_from_the_core_--_we_are_a_large_part_of_the_way_here_I_need_to_summarize_what_was_done._.2A_Remove_Settings_from_the_core_and_make_it_a_user_facing_configuration_.28This_is_primarily_done_--_jason.29_.2A_Have_one_configuration_model_for_request_.2A_Have_one_configuration_model_for_session.3A_session_takes_the_request_in_the_constructor_and_delegates_.2A_Domain_logging_.2A_Plugin_Manager_.2A.2A_Removal_of_the_Plugin_Registry_.28done.29_--_we_moved_in_a_direction_where_people_lock_down_their_versions_and_we.27ve_helped_by_putting_default_versions_in_the_parent_POM._.2A.2A_Load_Plugin_dependencies_into_a_separate_ClassRealm_.28done.29_.2A.2A_Plugin_Execution_Environment.3A_Ability_to_run_any_version_of_a_plugin_where_an_environment_is_created_which_contains_all_the_requirements_for_a_particular_version_of_the_Plugin_API_.2A_Lifecycle_Executor_.2A.2A_Queryable_Lifecycle_.2A.2A.2A_The_most_important_change_in_the_em
 
bedding_environment._You_can_actually_query_Maven_for_the_complete_execution_before_it_happens._We_must_know_the_entire_model_of_execution_before_we_execute._.2A_OSGi-like_Classloading_to_support_isolated_execution_environments"></a>
+<h2>Remove the use of separate plugin repositories. We only need to pull 
resources from one repository. We started doing this but I've had a couple 
clients that want to separate the tools they use from the code they are 
developing/building. * Decouple script-based Plugins from the core -- we are a 
large part of the way here I need to summarize what was done. * Remove Settings 
from the core and make it a user facing configuration (This is primarily done 
-- jason) * Have one configuration model for request * Have one configuration 
model for session: session takes the request in the constructor and delegates * 
Domain logging * Plugin Manager ** Removal of the Plugin Registry (done) -- we 
moved in a direction where people lock down their versions and we've helped by 
putting default versions in the parent POM. ** Load Plugin dependencies into a 
separate ClassRealm (done) ** Plugin Execution Environment: Ability to run any 
version of a plugin where an environment is created which contains
  all the requirements for a particular version of the Plugin API * Lifecycle 
Executor ** Queryable Lifecycle *** The most important change in the embedding 
environment. You can actually query Maven for the complete execution before it 
happens. We must know the entire model of execution before we execute. * 
OSGi-like Classloading to support isolated execution 
environments</h2></section></section><section><a id="h3._Java_5"></a>
+<h1>h3. Java 5</h1></section><section><a 
id="Java5_annotations_for_plugins.3A_we_have_two_implementations_that_have_now_been_merged_in_plexus-cdc._QDOX_1.7_has_now_been_released_so_we_may_want_to_check_the_source_level_gleaning_again._Jason_Dillon_has_created_a_working_class_processing_model._We_need_to_deal_with_Plexus_components_and_Maven_plugins."></a>
+<h1>Java5 annotations for plugins: we have two implementations that have now 
been merged in plexus-cdc. QDOX 1.7 has now been released so we may want to 
check the source level gleaning again. Jason Dillon has created a working class 
processing model. We need to deal with Plexus components and Maven 
plugins.</h1></section><section><a 
id="h3._Integration_and_promotion_of_scriptable_plugins"></a>
+<h1>h3. Integration and promotion of scriptable 
plugins</h1></section><section><a 
id="h3._Toolchains_.2A_Milos_has_implemented_this_and_Shane_had_some_feedback_so_this_needs_to_be_linked_together"></a>
+<h1>h3. Toolchains * Milos has implemented this and Shane had some feedback so 
this needs to be linked together</h1></section><section><a 
id="h3._Reporting_.2A_Report_Execution_Environment.3A_Ability_to_run_any_version_of_a_report_where_an_environment_is_created_which_contains_all_the_requirements_for_a_particular_version_of_the_Report_API._.2A_Decouple_the_reporting_core._We_need_to_get_Doxia_out_of_the_core._Anything_it_needs_to_run_should_be_isolated."></a>
+<h1>h3. Reporting * Report Execution Environment: Ability to run any version 
of a report where an environment is created which contains all the requirements 
for a particular version of the Report API. * Decouple the reporting core. We 
need to get Doxia out of the core. Anything it needs to run should be 
isolated.</h1></section><section><a id="h1._Other_Use_Cases_to_Integrate"></a>
+<h1>h1. Other Use Cases to Integrate</h1></section><section><a 
id="h2._Determining_project_type_in_Eclipse_.28Igor_Fedorenko.29"></a>
+<h1>h2. Determining project type in Eclipse (Igor 
Fedorenko)</h1></section><section><a 
id="Support_for_.22java.22_projects_in_Eclipse_has_certain_overhead_and_it_is_desirable_to_only_enable_for_projects_that_actually_require_it._More_specifically.2C_java_maven_projects_have_JRE_classpath_container.2C_maven_classpath_container.2C_have_java-specific_UI_elements_enabled_and_are_offered_in_various_java-related_searches._Also.2C_tools_like_WTP_and_AJDT_treat_.28eclipse.29_java_projects_specially."></a>
+<h1>Support for &quot;java&quot; projects in Eclipse has certain overhead and 
it is desirable to only enable for projects that actually require it. More 
specifically, java maven projects have JRE classpath container, maven classpath 
container, have java-specific UI elements enabled and are offered in various 
java-related searches. Also, tools like WTP and AJDT treat (eclipse) java 
projects specially.</h1></section><section><a 
id="There_is_currently_no_direct_way_to_tell_if_a_.28maven.29_project_needs_to_be_configured_as_java_project_in_eclipse._The_closest_test_condition_I_can_think_off_is"></a>
+<h1>There is currently no direct way to tell if a (maven) project needs to be 
configured as java project in eclipse. The closest test condition I can think 
off is</h1></section><section><a 
id="a1_the_project_ArtifactHandler_language.3Djava"></a>
+<h1>1 the project ArtifactHandler language=java</h1></section><section><a 
id="and"></a>
+<h1>and</h1></section><section><a 
id="a2.1_ArtifactHandler_addedToClasspath.3Dtrue"></a>
+<h1>2.1 ArtifactHandler addedToClasspath=true</h1></section><section><a 
id="or"></a>
+<h1>or</h1></section><section><a 
id="a2.2_MavenProject.getCompileSourceRoots.28.29.size.28.29_.3E_0"></a>
+<h1>2.2 MavenProject.getCompileSourceRoots().size() &gt; 
0</h1></section><section><a id="or_1"></a>
+<h1>or</h1></section><section><a 
id="a2.3_MavenProject.getTestCompileSourceRoots.28.29.size.28.29_.3E_0"></a>
+<h1>2.3 MavenProject.getTestCompileSourceRoots().size() &gt; 
0</h1></section><section><a 
id="a.28in_other_words_the_project_is_java_and_either_itself_is_added_to_classpath_or_has_sources_to_compile.29."></a>
+<h1>(in other words the project is java and either itself is added to 
classpath or has sources to compile).</h1></section><section><a 
id="This_test_will_return_false_negative_for_some_WAR_projects_.28not_added_to_classpath_and_don.27t_have_any_sources_to_compile.29._Also.2C_compileSourceRoots_and_testCompileSourceRoots_only_become_fully_populated_after_running_maven_build_lifecycle.2C_which_is_expensive."></a>
+<h1>This test will return false negative for some WAR projects (not added to 
classpath and don't have any sources to compile). Also, compileSourceRoots and 
testCompileSourceRoots only become fully populated after running maven build 
lifecycle, which is expensive.</h1><section><a 
id="Extensions_.2A.2A_Different_categories_of_extensions.3A_providers_vs_packaging_vs_PMD.2FCheckstyle_resources_stuff_in_a_JAR_.2A.2A_Transparent_Extension_Loading_.2A.2A.2A_Any_Wagon_or_SCM_providers_should_get_picked_up_automatically_from_SCM_and_distributionManagement_URLs_.2A.2A.2A_Any_extensions_containing_packaging.2Flifecycle_related_bits_needs_to_be_picked_up_automatically"></a>
 <h2>Extensions ** Different categories of extensions: providers vs packaging 
vs PMD/Checkstyle resources stuff in a JAR ** Transparent Extension Loading *** 
Any Wagon or SCM providers should get picked up automatically from SCM and 
distributionManagement URLs *** Any extensions containing packaging/lifecycle 
related bits needs to be picked up automatically</h2></section></section>
         </main>
       </div>

Modified: maven/website/content/articles.html
==============================================================================
--- maven/website/content/articles.html (original)
+++ maven/website/content/articles.html Sat May 11 11:53:23 2024
@@ -2,17 +2,17 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0-M10 from 
content/xdoc/articles.xml at 2024-05-11
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M18 from 
content/xdoc/articles.xml at 2024-05-11
  | Rendered using Apache Maven Fluido Skin 2.0.0-M6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M10" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M18" />
     <meta name="author" content="Brett Porter" />
     <meta name="author" content="Vincent Massol" />
-    <title>Maven – External Resources on Maven</title>
+    <title>Maven</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M6.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
@@ -39,8 +39,10 @@
     <div class="container-fluid">
       <header>
         <div id="banner">
-          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><img src="images/apache-maven-project.png"  alt="Apache Maven 
Site" style="" /></a></div>
-          <div class="pull-right"><a href="./" id="bannerRight"><img 
src="images/maven-logo-black-on-white.png"  alt="" style="" /></a></div>
+          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><h1>Apache Maven Site</h1>
+</a></div>
+          <div class="pull-right"><a href="./" id="bannerRight"><h1>$esc.xml( 
$banner.name )</h1>
+</a></div>
           <div class="clear"><hr/></div>
         </div>
 
@@ -48,7 +50,8 @@
           <ul class="breadcrumb">
       <li><a href="https://www.apache.org/"; class="externalLink" 
title="Apache">Apache</a><span class="divider">/</span></li>
       <li><a href="index.html" title="Maven">Maven</a><span 
class="divider">/</span></li>
-    <li class="active ">External Resources on Maven <a 
href="https://github.com/apache/maven-site/tree/master/content/xdoc/articles.xml";><img
 src="./images/accessories-text-editor.png" title="Edit" /></a></li>
+
+    <li class="active ">Maven <a 
href="https://github.com/apache/maven-site/tree/master/content/xdoc/articles.xml";><img
 src="./images/accessories-text-editor.png" title="Edit" /></a></li>
         <li id="publishDate" class="pull-right"><span class="divider">|</span> 
Last Published: 2024-05-11</li>
         <li class="pull-right"><span class="divider">|</span>
 <a href="scm.html" title="Get Sources">Get Sources</a></li>
@@ -130,7 +133,7 @@
         <main id="bodyColumn"  class="span10" >
 
   
-    <section>
+    <section><a id="Books_on_Maven"></a>
 <h1>Books on Maven</h1>
     
 
@@ -205,7 +208,7 @@
       
     </section>
 
-    <section>
+    <section><a id="Articles_on_Maven"></a>
 <h1>Articles on Maven</h1>
       
 <p>

Modified: maven/website/content/background/history-of-maven.html
==============================================================================
--- maven/website/content/background/history-of-maven.html (original)
+++ maven/website/content/background/history-of-maven.html Sat May 11 11:53:23 
2024
@@ -2,15 +2,15 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0-M10 from 
content/markdown/background/history-of-maven.md at 2024-05-11
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M18 from 
content/markdown/background/history-of-maven.md at 2024-05-11
  | Rendered using Apache Maven Fluido Skin 2.0.0-M6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M10" />
-    <title>Maven – History of Maven</title>
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M18" />
+    <title>Maven</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-2.0.0-M6.min.css" 
/>
     <link rel="stylesheet" href="../css/site.css" />
     <link rel="stylesheet" href="../css/print.css" media="print" />
@@ -37,8 +37,10 @@
     <div class="container-fluid">
       <header>
         <div id="banner">
-          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><img src="../images/apache-maven-project.png"  alt="Apache 
Maven Site" style="" /></a></div>
-          <div class="pull-right"><a href=".././" id="bannerRight"><img 
src="../images/maven-logo-black-on-white.png"  alt="" style="" /></a></div>
+          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><h1>Apache Maven Site</h1>
+</a></div>
+          <div class="pull-right"><a href=".././" 
id="bannerRight"><h1>$esc.xml( $banner.name )</h1>
+</a></div>
           <div class="clear"><hr/></div>
         </div>
 
@@ -46,7 +48,8 @@
           <ul class="breadcrumb">
       <li><a href="https://www.apache.org/"; class="externalLink" 
title="Apache">Apache</a><span class="divider">/</span></li>
       <li><a href="../index.html" title="Maven">Maven</a><span 
class="divider">/</span></li>
-    <li class="active ">History of Maven <a 
href="https://github.com/apache/maven-site/tree/master/content/markdown/background/history-of-maven.md";><img
 src="../images/accessories-text-editor.png" title="Edit" /></a></li>
+
+    <li class="active ">Maven <a 
href="https://github.com/apache/maven-site/tree/master/content/markdown/background/history-of-maven.md";><img
 src="../images/accessories-text-editor.png" title="Edit" /></a></li>
         <li id="publishDate" class="pull-right"><span class="divider">|</span> 
Last Published: 2024-05-11</li>
         <li class="pull-right"><span class="divider">|</span>
 <a href="../scm.html" title="Get Sources">Get Sources</a></li>
@@ -126,7 +129,7 @@
           </div>
         </header>
         <main id="bodyColumn"  class="span10" >
-<section>
+<section><a id="History_of_Maven"></a>
 <h1>History of Maven</h1><!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -150,7 +153,7 @@ under the License.
  Jason van Zyl
  12 October 2005
 -->
-<section>
+<section><a id="History_of_Maven_by_Jason_van_Zyl"></a>
 <h2>History of Maven by Jason van Zyl</h2>
 <p>Maven began its life in the <a href="http://jakarta.apache.org"; 
class="externalLink">Jakarta</a> <a 
href="http://jakarta.apache.org/alexandria/legacy/"; 
class="externalLink">Alexandria</a> project. The Alexandria project is now 
defunct but was the breeding ground for not only Maven, but for the <a 
href="http://gump.apache.org"; class="externalLink">Gump</a> and <a 
href="http://forrest.apache.org"; class="externalLink">Forrest</a> projects as 
well. The first import of prototype sources happened in
 <a 
href="http://mail-archives.apache.org/mod_mbox/jakarta-alexandria-dev/200108.mbox/%3c20010827163505.53005.qm...@icarus.apache.org%3e";
 class="externalLink">August 2001</a>. As of the date of this document (October 
2005) Maven was <a 
href="http://mail-archives.apache.org/mod_mbox/jakarta-alexandria-dev/200202.mbox/%3c20020202153719.50163.qm...@icarus.apache.org%3e";
 class="externalLink">removed</a> from Alexandria about 3 years, 7 months ago 
making Maven about 4 years old! Maven spent about 5 months as part of the 
Alexandria before moving on to its next home in the <a 
href="http://turbine.apache.org/"; class="externalLink">Turbine</a> project.</p>

Modified: maven/website/content/background/philosophy-of-maven.html
==============================================================================
--- maven/website/content/background/philosophy-of-maven.html (original)
+++ maven/website/content/background/philosophy-of-maven.html Sat May 11 
11:53:23 2024
@@ -2,15 +2,15 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0-M10 from 
content/markdown/background/philosophy-of-maven.md at 2024-05-11
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M18 from 
content/markdown/background/philosophy-of-maven.md at 2024-05-11
  | Rendered using Apache Maven Fluido Skin 2.0.0-M6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M10" />
-    <title>Maven – Philosophy of Maven</title>
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M18" />
+    <title>Maven</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-2.0.0-M6.min.css" 
/>
     <link rel="stylesheet" href="../css/site.css" />
     <link rel="stylesheet" href="../css/print.css" media="print" />
@@ -37,8 +37,10 @@
     <div class="container-fluid">
       <header>
         <div id="banner">
-          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><img src="../images/apache-maven-project.png"  alt="Apache 
Maven Site" style="" /></a></div>
-          <div class="pull-right"><a href=".././" id="bannerRight"><img 
src="../images/maven-logo-black-on-white.png"  alt="" style="" /></a></div>
+          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><h1>Apache Maven Site</h1>
+</a></div>
+          <div class="pull-right"><a href=".././" 
id="bannerRight"><h1>$esc.xml( $banner.name )</h1>
+</a></div>
           <div class="clear"><hr/></div>
         </div>
 
@@ -46,7 +48,8 @@
           <ul class="breadcrumb">
       <li><a href="https://www.apache.org/"; class="externalLink" 
title="Apache">Apache</a><span class="divider">/</span></li>
       <li><a href="../index.html" title="Maven">Maven</a><span 
class="divider">/</span></li>
-    <li class="active ">Philosophy of Maven <a 
href="https://github.com/apache/maven-site/tree/master/content/markdown/background/philosophy-of-maven.md";><img
 src="../images/accessories-text-editor.png" title="Edit" /></a></li>
+
+    <li class="active ">Maven <a 
href="https://github.com/apache/maven-site/tree/master/content/markdown/background/philosophy-of-maven.md";><img
 src="../images/accessories-text-editor.png" title="Edit" /></a></li>
         <li id="publishDate" class="pull-right"><span class="divider">|</span> 
Last Published: 2024-05-11</li>
         <li class="pull-right"><span class="divider">|</span>
 <a href="../scm.html" title="Get Sources">Get Sources</a></li>
@@ -126,7 +129,7 @@
           </div>
         </header>
         <main id="bodyColumn"  class="span10" >
-<section>
+<section><a id="Philosophy_of_Maven"></a>
 <h1>Philosophy of Maven</h1><!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file

Modified: maven/website/content/ci-management.html
==============================================================================
--- maven/website/content/ci-management.html (original)
+++ maven/website/content/ci-management.html Sat May 11 11:53:23 2024
@@ -2,14 +2,14 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0-M10 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.5.0:ci-management 
at 2024-05-11
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0-M18 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.5.0:ci-management 
at 2024-05-11
  | Rendered using Apache Maven Fluido Skin 2.0.0-M6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M10" />
+    <meta name="generator" content="Apache Maven Doxia Site Renderer 
2.0.0-M18" />
     <title>Maven – CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M6.min.css" />
     <link rel="stylesheet" href="./css/site.css" />
@@ -37,8 +37,10 @@
     <div class="container-fluid">
       <header>
         <div id="banner">
-          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><img src="images/apache-maven-project.png"  alt="Apache Maven 
Site" style="" /></a></div>
-          <div class="pull-right"><a href="./" id="bannerRight"><img 
src="images/maven-logo-black-on-white.png"  alt="" style="" /></a></div>
+          <div class="pull-left"><a href="https://www.apache.org/"; 
id="bannerLeft"><h1>Apache Maven Site</h1>
+</a></div>
+          <div class="pull-right"><a href="./" id="bannerRight"><h1>$esc.xml( 
$banner.name )</h1>
+</a></div>
           <div class="clear"><hr/></div>
         </div>
 
@@ -136,8 +138,7 @@
 <p>This project uses <a class="externalLink" 
href="https://www.jenkins.io/";>Jenkins</a>.</p></section><section>
 <h1>Access</h1><a id="Access"></a>
 <p>The following is a link to the continuous integration system used by the 
project:</p>
-<div class="verbatim">
-<pre><a class="externalLink" 
href="https://ci-maven.apache.org/job/Maven/job/maven-box/";>https://ci-maven.apache.org/job/Maven/job/maven-box/</a></pre></div></section><section>
+<pre><a class="externalLink" 
href="https://ci-maven.apache.org/job/Maven/job/maven-box/";>https://ci-maven.apache.org/job/Maven/job/maven-box/</a></pre></section><section>
 <h1>Notifiers</h1><a id="Notifiers"></a>
 <p>Configuration for notifying developers/users when a build is unsuccessful, 
including user information and notification mode.</p>
 <table class="table table-striped">


Reply via email to