[ 
https://issues.apache.org/jira/browse/MNG-8023?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17808778#comment-17808778
 ] 

ASF GitHub Bot commented on MNG-8023:
-------------------------------------

gnodet commented on code in PR #1387:
URL: https://github.com/apache/maven/pull/1387#discussion_r1459520780


##########
api/maven-api-core/src/main/java/org/apache/maven/api/Project.java:
##########
@@ -37,24 +37,103 @@
 @Experimental
 public interface Project {
 
+    /**
+     * Returns the project groupId.
+     */
     @Nonnull
     String getGroupId();
 
+    /**
+     * Returns the project artifactId.
+     */
     @Nonnull
     String getArtifactId();
 
+    /**
+     * Returns the project version.
+     */
     @Nonnull
     String getVersion();
 
+    /**
+     * Returns the project packaging.
+     * <p>
+     * Note: unlike in legacy code, logical checks against string representing 
packaging (returned by this method)
+     * are NOT recommended (code like {@code 
"pom".equals(project.getPackaging)} must be avoided). Use method
+     * {@link #getArtifacts()} to gain access to POM or build artifact.
+     *
+     * @see #getArtifacts()
+     */
     @Nonnull
     String getPackaging();
 
+    /**
+     * Returns the project POM artifact, that is the artifact of the POM of 
this project. Every project have POM
+     * artifact, while the existence of backing POM file is NOT a requirement 
(i.e. for some transient projects).
+     *
+     * @see org.apache.maven.api.services.ArtifactManager#getPath(Artifact)
+     */
+    @Nonnull
+    default Artifact getPomArtifact() {
+        return getArtifacts().get(0);
+    }
+
+    /**
+     * Returns the project artifact, that is the artifact produced by this 
project build. This artifact MAY be same
+     * as the one returned by {@link #getPomArtifact()}, if the project is 
actually not producing any main artifact.
+     * The existence of artifact backing file depends on which lifecycle step 
this method was invoked, as the file
+     * may not yet be built.
+     * <p>
+     * If only non-POM artifacts are needed, better use {@link 
#getArtifacts()} method: if that method returns list
+     * having one element, the methods {@link #getPomArtifact()} and this one 
will return same artifact. For non-POM
+     * artifacts one would filter for results having two elements, and would 
consume second element of the list.

Review Comment:
   Should we add something like that to be complete and instead of that whole 
paragraph which is a bit complicated ?
   ```
   @Nonnull
   default Optional<Artifact> getMainArtifact() {
       List<Artifact> artifacts = getArtifacts();
       return artifacts.size() == 2 ? Optional.of(artifacts.get(1)) : 
Optional.empty();
   }
   ```





> New method for project artifacts
> --------------------------------
>
>                 Key: MNG-8023
>                 URL: https://issues.apache.org/jira/browse/MNG-8023
>             Project: Maven
>          Issue Type: Task
>          Components: API
>            Reporter: Tamas Cservenak
>            Assignee: Tamas Cservenak
>            Priority: Major
>             Fix For: 4.0.0, 4.0.0-alpha-13
>
>
> Introduce a new method on API Project object that exposes "main artifacts" of 
> project. The method can return 1 or 2 artifacts (never less than 1 and never 
> more than 2). These are NOT the attached artifacts! (see ProjectManager for 
> that).
> In short: projects with packaging "pom", "bom" (that produce only one 
> artifact) will on this method return 1 artifact, while projects for example 
> with packaging "jar" will return 2 artifacts (as they produce, install, 
> deploy two artifacts, the POM and the JAR/WAR/etc).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to