<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

    <!-- First, a list of API names you may use: -->
    <apidefs>
        <apidef name="general">Maven Project API</apidef>
        <!-- etc. -->
    </apidefs>

    <!-- ACTUAL CHANGES BEGIN HERE: -->

    <changes>
        <change id="RunConfig-options">
            <api name="general"/>
            <summary>RunConfig provides access to Maven options</summary>
            <version major="2" minor="167"/>
            <date day="5" month="11" year="2024"/>
            <author login="petrovic-d"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                <p>
                    RunConfig now provides access to Maven options / flags. Client can decide which
                    options / flags will be passed to command line.
                </p>
            </description>
            <class package="org.netbeans.modules.maven.api.execute" name="RunConfig"/>
        </change>
        <change id="pluginconfigpathparams-pathitem-name-null">
            <api name="general"/>
            <summary>Enable using PluginConfigPathParams with null valued pathItemName</summary>
            <version major="2" minor="164"/>
            <date day="10" month="8" year="2024"/>
            <author login="matthiasblaesing"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                Maven <a href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html#mapping-collections-and-arrays"
                >documentation for plugin configuration</a> declares, that for
                list and array typed configuration plugins, the name of the
                single entry element does not matter, only the name of the
                wrapping element is relevant. This change modifies
                <pre>PluginPropertyUtils.PluginConfigPathParams</pre> to always
                report <pre>null</pre> for <pre>pathItemName</pre> and adds a
                constructor without that parameter, deprecating the original
                constructor.
            </description>
            <class package="org.netbeans.modules.maven.api" name="PluginPropertyUtils"/>
            <issue number="GITHUB-7658" />
        </change>
        <change id="partial-maven-project">
            <api name="general"/>
            <summary>Support for partially loaded projects</summary>
            <version major="2" minor="162"/>
            <date day="3" month="10" year="2023"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                Added a <a href="@TOP@/org/netbeans/modules/maven/api/NbMavenProject.html#getPartialProject(org.apache.maven.project.MavenProject)">
                getPartialProject</a> that returns potentially incompletely loaded project instead of a mocked-up fallback (see <a href="@TOP@/org/netbeans/modules/maven/api/NbMavenProject.html#isErrorPlaceholder(org.apache.maven.project.MavenProject)">isErrorPlaceholder()</a>.
                Also added a <a href="@TOP@/org/netbeans/modules/maven/api/NbMavenProject.html#isIncomplete(org.apache.maven.project.MavenProject)">isIncomplete()</a> check that checks project's status.
            </description>
            <class package="org.netbeans.modules.maven.api" name="NbMavenProject"/>
        </change>
        <change id="declare-run-goals">
            <api name="general"/>
            <summary>Allow extensions to declare run-like goals</summary>
            <version major="2" minor="161"/>
            <date day="6" month="12" year="2023"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                <p>
                    The GUI recognizes user modifications to actions and refuses to configure
                    a modified "run" action with vm and app arguments. It is now possible for a plugin
                    to register an alternative goal, which is recognized as "exec"-like one and does
                    not disable the GUI.
                </p>
                <p>
                    For an example, see <a href="@TOP@/org/netbeans/modules/maven/spi/actions/MavenActionsProvider.html#declare-run-goals">MavenActionProvider</a>.
                </p>
            </description>
        </change>
        <change id="runutils-createconfig-action">
            <api name="general"/>
            <summary></summary>
            <version major="2" minor="157"/>
            <date day="23" month="1" year="2023"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                Added a <a href="@TOP@/org/netbeans/modules/maven/api/execute/RunUtils.html#createRunConfig(java.lang.String,org.netbeans.api.project.Project,org.netbeans.spi.project.ProjectConfiguration,org.openide.util.Lookup)">
                RunUtils.createRunConfig()</a> variant that allows to create a <a href="@TOP@/org/netbeans/modules/maven/api/execute/RunConfig.html">RunConfig</a> for a project-defined action. 
                Clients can use this function to use all user customizations that may have been configured for the project action before executing it using 
                <a href="@TOP@/org/netbeans/modules/maven/api/execute/RunUtils.html#run(org.netbeans.modules.maven.api.execute.RunConfig)">RunUtils.run</a>.
            </description>
            <class package="org.netbeans.modules.maven.api.execute" name="RunUtils"/>
        </change>
        <change id="lifecycle-white-list">
            <api name="general"/>
            <summary>LifecycleParticipants can be ignored</summary>
            <version major="2" minor="156"/>
            <date day="9" month="9" year="2022"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                NetBeans warns if a project / plugin provides AbstractLifecycleParticipants that
                can reconfigure the project after load. Now some harmless ones can be whitelisted
                so they do not produce warning / project problem. See <a href="@TOP@/architecture-summary.html#layer-LifecycleParticipants">LifecycleParticipants</a>.
            </description>
        </change>
        <change id="evaluated-project">
            <api name="general"/>
            <summary>Project model can be customized for specific action or usage</summary>
            <version major="2" minor="155"/>
            <date day="10" month="8" year="2022"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                Project state can be inspected with respect to an intended action to be run or used, and possible
                customized properties or profiles. This allows clients to more precisely follow customizations in 
                the project file and/or action mapping that would be applied when actually using project actions.
            </description>
            <class package="org.netbeans.modules.maven.api" name="NbMavenProject"/>
        </change>
        <change id="plugin.conf.paths">
            <api name="general"/>
            <summary>Added helper method to get artifact paths from build plugin configurations.</summary>
            <version major="2" minor="151"/>
            <date day="24" month="9" year="2021"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                In addition to String property values, or String lists, artifact-based paths, that are convertible to
                files, are sometimes present in plugin configuration. The new helper function 
                <a href="@TOP@/org/netbeans/modules/maven/api/PluginPropertyUtils.html#getPluginPathProperty(org.netbeans.api.project.Project,org.netbeans.modules.maven.api.PluginPropertyUtils.PluginConfigPathParams,boolean,java.util.List)">getPluginPathProperty</a>
                resolves a list of artifacts from the POM configuration and reports errors encountered.
            </description>
        </change>
        <change id="disable-actions">
            <api name="general"/>
            <summary>Plugin-dependent Lookup</summary>
            <version major="2" minor="149"/>
            <date day="24" month="6" year="2021"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                <p>
                    Actions can be <b>disabled</b> by the MavenActionsProvider for a configuration.
                </p>
            </description>
            <class name="ActionToGoalUtils" package="org.netbeans.modules.maven.execute"/>
        </change>
        <change id="plugin-lookup">
            <api name="general"/>
            <summary>Plugin-dependent Lookup</summary>
            <version major="2" minor="148"/>
            <date day="15" month="5" year="2021"/>
            <author login="sdedic"/>
            <compatibility addition="yes" semantic="compatible"/>
            <description>
                <p>
                    Register services for a specific <i>maven plugin</i>
                    used in the project. See <a href="@TOP@/architecture-summary.html#layer-PluginLookup">PluginLookup</a>.
                </p>
            </description>
        </change>
        <change id="disable-maven-repo-indexing">
            <api name="general"/>
            <summary>Default for frequency of indexing</summary>
            <version major="2" minor="147"/>
            <date day="1" month="4" year="2021"/>
            <author login="jtulach"/>
            <compatibility semantic="compatible"/>
            <description>
                <p>
                    Introducing <a href="@TOP@architecture-summary.html#group-branding">branding APIs</a>
                    specify default frequency for downloading Maven index.
                </p>
            </description>
        </change>
        <change id="ProjectLookup.fallback">
            <api name="general"/>
            <summary>Allow project services, that are ordered <b>after</b> specific packaging type</summary>
            <version major="2" minor="144"/>
            <date day="10" month="2" year="2021"/>
            <author login="sdedic"/>
            <compatibility addition="yes" binary="compatible" semantic="compatible"/>
            <description>
                <p>
                    Project lookup consists of base services, plus services for the project's packaging type. This change allows for
                    generic post-processing after packaging-specific service. See <a href="@TOP@/architecture-summary.html#layer-MavenPackagingLookup">MavenPackagingLookup</a>
                    for more details.
                </p>
            </description>
        </change>
        <change id="RunConfig.getActionLookup">
            <api name="general"/>
            <summary>RunConfig provides access to action lookup for parameters extensibility</summary>
            <version major="2" minor="144"/>
            <date day="10" month="2" year="2021"/>
            <author login="sdedic"/>
            <compatibility addition="yes" source="incompatible" binary="compatible" semantic="compatible"/>
            <description>
                <p>
                    RunConfig now serves the originating action's context Lookup from <a href="@TOP@/org/netbeans/modules/maven/api/execute/RunConfig.html#getActionContext()">RunConfig.getActionContext()</a>
                    so that the caller can pass extended one-time configuration for the action.
                </p>
            </description>
            <class package="org.netbeans.modules.maven.api.execute" name="RunConfig"/>
        </change>
        <change id="execution.explicitParameters">
            <api name="general"/>
            <summary>Allow to extend or override parameters for user execution from action caller</summary>
            <version major="2" minor="144"/>
            <date day="10" month="2" year="2021"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible"/>
            <description>
                Added support for <a href="@org-netbeans-modules-extexecution-base@/org/netbeans/api/extexecution/base/ExplicitProcessParameters.html">ExplicitProcessParameters</a>
                for Maven-nature projects. The <code>ExternaProcessParameterss</code> instructions now append to or replace VM argsuments or 
                user program arguments. See <a href="@TOP@/org/netbeans/modules/maven/execute/MavenCommandLineExecutor.html">MavenCommandLineExecutor</a>
                for more details.
            </description>
        </change>
        <change id="reusetabs-cos">
           <api name="general"/>
           <summary>Default for reusing tabs and compile on save</summary>
           <version major="2" minor="141"/>
           <date day="12" month="10" year="2020"/>
           <author login="jtulach"/>
           <compatibility semantic="compatible"/>
           <description>
               <p>
                   Introducing <a href="@TOP@architecture-summary.html#group-branding">branding APIs</a>
                   to configure default value for <b>reusing tabs</b> and also for
                   <b>compile on save behavior</b> in Maven projects.
               </p>
           </description>
        </change>
        <change id="jpda-attach-trigger">
           <api name="general"/>
           <summary>Attach to Debugger on triggers</summary>
           <version major="2" minor="127"/>
           <date day="8" month="12" year="2017"/>
           <author login="monacotoni"/>
           <compatibility modification="yes" semantic="compatible"/>
           <description>
               <p>
                   New property to allow  to attach debugger while goal execution is in progress:
                   <code>ACTION_PROPERTY_JPDAATTACH_TRIGGER</code>. Read more about 
    usage of this property in 
    the <a href="@TOP@architecture-summary.html#property-jpda.attach.trigger">nbactions.xml file</a>.
               </p>
           </description>
           <class package="org.netbeans.modules.maven.api" name="Constants"/>
        </change>
        <change id="jpda-attach">
           <api name="general"/>
           <summary>Attach to Debugger after Goal Execution</summary>
           <version major="2" minor="113"/>
           <date day="10" month="3" year="2015"/>
           <author login="jtulach"/>
           <compatibility modification="yes" semantic="compatible"/>
           <description>
               <p>
                   New properties to allow one to attach debugger after
                   a goal is executed: 
    <code>ACTION_PROPERTY_JPDAATTACH</code>,
    <code>ACTION_PROPERTY_JPDAATTACH_ADDRESS</code>,
    <code>ACTION_PROPERTY_JPDAATTACH_PORT</code>. Read more about 
    usage of these properties in 
    the <a href="@TOP@architecture-summary.html#property-jpda.attach">nbactions.xml file</a>.
               </p>
           </description>
           <class package="org.netbeans.modules.maven.api" name="Constants"/>
           <issue number="229192"/>
        </change>
        
        <change id="nbactions-profiles">
           <api name="general"/>
           <summary>nbactions.xml supports profiles section</summary>
           <version major="2" minor="107"/>
           <date day="15" month="7" year="2014"/>
           <author login="jtulach"/>
           <compatibility modification="yes" semantic="compatible"/>
           <description>
               <p>
                   Format of <code>nbactions.xml</code> file has been
                   extended to support <a href="@TOP@architecture-summary.html#java.io.File-nbactions.xml">
                       profiles section</a>.
               </p>
           </description>
           <!--
           <class package="org.netbeans.spi.project.ui" name="LogicalViewProvider"/>
           -->
           <issue number="229192"/>
        </change>

    
        
    </changes>

    <!-- Now the surrounding HTML text and document structure: -->

    <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <==============

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE projects/projectuiapi/apichanges.xml

        -->
        <head>
            <title>Change History for the Maven Project API</title>
        </head>
        <body>

            <p class="overviewlink">
                <a href="overview-summary.html">Overview</a>
            </p>

            <h1>Introduction</h1>

            <p>This document lists changes made to the <a href="@org-netbeans-modules-maven@/index.html">Maven Project API</a>.</p>

            <!-- The actual lists of changes, as summaries and details: -->
            <hr/>
            <standard-changelists module-code-name="org.netbeans.modules.maven/1"/>

            <hr/>
            <p>@FOOTER@</p>

        </body>
    </htmlcontents>

</apichanges>
