[ 
https://issues.apache.org/jira/browse/MNG-8479?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Scott Kurz updated MNG-8479:
----------------------------
    Description: 
h2. *Recreate steps*

With either a recent version of 3.9.x or 4.0.0-x, build my recreate plugin and 
use the j2ee-simple archetype to create a test project then run the test goal 
like this:
 # git clone g...@github.com:scottkurz/counter-maven-plugin.git; cd 
counter-maven-plugin; mvn install
 # mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes 
-DarchetypeArtifactId=maven-archetype-j2ee-simple -DarchetypeVersion=1.5 
-DgroupId=mygroup -DartifactId=myartifact -Dversion=1.0-SNAPSHOT -Dpackage=myco
 # cd myartifact; {{{}mvn 
mygroup:counter-maven-plugin:1.0-SNAPSHOT:countTargets{}}}{{{{}}{}}}

You'll see an artifact resolution failure like this: 

 

{{[ERROR] Failed to execute goal on project ear: Could not resolve dependencies 
for project mygroup:ear:ear:1.0-SNAPSHOT}}

{{[ERROR] dependency: mygroup:ejbs:jar:1.0-SNAPSHOT (compile)}}
{{[ERROR] : The following artifacts could not be resolved: 
mygroup:ejbs:jar:1.0-SNAPSHOT (absent)}}
h2. *More Details*

 

I was able to fix the issue by making this simple change to *ReactorReader.java*

[https://github.com/apache/maven/pull/2016]

 

Note my recreate/test plugin mojo looks like

 
{code:java}
@Mojo( name = "countTargets", defaultPhase = LifecyclePhase.PROCESS_SOURCES, 
requiresDependencyResolution = ResolutionScope.TEST )
@Execute(phase = LifecyclePhase.PROCESS_TEST_CLASSES)
public class MyMojo{code}
 

 

If I understand correctly, the role of the `@Execute` here is not to directly 
resolve the artifact (since this other stuff, IIUC, happens in a forked 
Maven)... but rather to enable the test in 
_*org.apache.maven.ReactorReader.find(MavenProject, Artifact)*_ to pass (the 
test we use to decide whether to employ this special technique of resolving the 
artifact to the project output dir): 

 

 
{code:java}
 if ( project.hasLifecyclePhase( "compile" ) && COMPILE_PHASE_TYPES.contains( 
type ) ){code}
 

 

I'm not really sure where the list of "types" from *ReactorReader* comes from:

 
 
{code:java}
privatestaticfinal Collection<String> COMPILE_PHASE_TYPES = new HashSet<>(
Arrays.asList("jar", "ejb-client", "war", "rar", "ejb3", "par", "sar", "wsr", 
"har", "app-client"));
{code}
 

It seems there's some overlap with packaging types but also that this is 
possibly a slightly different layer of abstraction?  

 

I wonder though if these types though should align with the types here: 

[https://github.com/apache/maven/blob/master/impl/maven-impl/src/main/java/org/apache/maven/internal/impl/resolver/type/DefaultTypeProvider.java]

e.g.

           
{code:java}
     new DefaultType("ejb", Language.JAVA_FAMILY, "jar", null, false, 
JavaPathType.CLASSES),
                new DefaultType("ejb-client", Language.JAVA_FAMILY, "jar", 
"client", false, JavaPathType.CLASSES),{code}
That's just a guess grepping through code..haven't traced it through.

 
h2. *Workarounds*

 

I can avoid the problem either by:
 # Adding a compile:   `mvn compile  
mygroup:counter-maven-plugin:1.0-SNAPSHOT:countTargets`
 # Running a similar sample switching from an 'ejb' package type dependency to 
a regular 'jar' package

h2. *References* 
 * It was working on this issue: 
[https://github.com/openrewrite/rewrite-maven-plugin/issues/920] that led me to 
investigate this.
 * I didn't take the time to digest this but it seems like there might? be some 
overlap: https://issues.apache.org/jira/browse/MNG-8097
 * The issue in which ReactorReader was changed to the relevant  code today: 
https://issues.apache.org/jira/browse/MNG-5898

  was:
h2. *Recreate steps*

With either a recent version of 3.9.x or 4.0.0-x, build my recreate plugin and 
use the j2ee-simple archetype to create a test project then run the test goal 
like this:
 # git clone g...@github.com:scottkurz/counter-maven-plugin.git; cd 
counter-maven-plugin; mvn install
 # mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes 
-DarchetypeArtifactId=maven-archetype-j2ee-simple -DarchetypeVersion=1.5 
-DgroupId=mygroup -DartifactId=myartifact -Dversion=1.0-SNAPSHOT -Dpackage=myco
 # cd myartifact; {{{}mvn 
mygroup:counter-maven-plugin:1.0-SNAPSHOT:countTargets{}}}{{{{}}{}}}

You'll see an artifact resolution failure like this: 

 

{{{{}}{}}}{{{}[ERROR] Failed to execute goal on project ear: Could not resolve 
dependencies for project mygroup:ear:ear:1.0-SNAPSHOT{}}}

{{[ERROR] dependency: mygroup:ejbs:jar:1.0-SNAPSHOT (compile)}}
{{{}[ERROR] : The following artifacts could not be resolved: 
mygroup:ejbs:jar:1.0-SNAPSHOT (absent)\{{{}{{}}}}}}

{{{{}}{}}}{{{{}}{}}}
h2. *More Details*

 

I was able to fix the issue by making this simple change to *ReactorReader.java*

[https://github.com/apache/maven/pull/2016]

 

Note my recreate/test plugin mojo looks like

 
{code:java}
@Mojo( name = "countTargets", defaultPhase = LifecyclePhase.PROCESS_SOURCES, 
requiresDependencyResolution = ResolutionScope.TEST )
@Execute(phase = LifecyclePhase.PROCESS_TEST_CLASSES)
public class MyMojo{code}
 

 

If I understand correctly, the role of the `@Execute` here is not to directly 
resolve the artifact (since this other stuff, IIUC, happens in a forked 
Maven)... but rather to enable the test in 
_*org.apache.maven.ReactorReader.find(MavenProject, Artifact)*_ to pass (the 
test we use to decide whether to employ this special technique of resolving the 
artifact to the project output dir): 

 

 
{code:java}
 if ( project.hasLifecyclePhase( "compile" ) && COMPILE_PHASE_TYPES.contains( 
type ) ){code}
 

 

I'm not really sure where the list of "types" from *ReactorReader* comes from:

 
 
{code:java}
privatestaticfinal Collection<String> COMPILE_PHASE_TYPES = new HashSet<>(
Arrays.asList("jar", "ejb-client", "war", "rar", "ejb3", "par", "sar", "wsr", 
"har", "app-client"));
{code}
 

It seems there's some overlap with packaging types but also that this is 
possibly a slightly different layer of abstraction?  

 

I wonder though if these types though should align with the types here: 

[https://github.com/apache/maven/blob/master/impl/maven-impl/src/main/java/org/apache/maven/internal/impl/resolver/type/DefaultTypeProvider.java]

e.g.

           
{code:java}
     new DefaultType("ejb", Language.JAVA_FAMILY, "jar", null, false, 
JavaPathType.CLASSES),
                new DefaultType("ejb-client", Language.JAVA_FAMILY, "jar", 
"client", false, JavaPathType.CLASSES),{code}
That's just a guess grepping through code..haven't traced it through.

 
h2. *Workarounds*

 

I can avoid the problem either by:
 # Adding a compile:   `mvn compile  
mygroup:counter-maven-plugin:1.0-SNAPSHOT:countTargets`
 # Running a similar sample switching from an 'ejb' package type dependency to 
a regular 'jar' package

h2. *References* 
 * It was working on this issue: 
[https://github.com/openrewrite/rewrite-maven-plugin/issues/920] that led me to 
investigate this.
 * I didn't take the time to digest this but it seems like there might? be some 
overlap: https://issues.apache.org/jira/browse/MNG-8097
 * The issue in which ReactorReader was changed to the relevant  code today: 
https://issues.apache.org/jira/browse/MNG-5898


> Multi-module, intra-reactor artifact resolution doesn't work for 'ejb' 
> packaged types like with 'jar' packaged types and requires compile
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: MNG-8479
>                 URL: https://issues.apache.org/jira/browse/MNG-8479
>             Project: Maven
>          Issue Type: Bug
>          Components: Core, Reactor and Workspace
>    Affects Versions: 3.9.6, 4.0.0-rc-2
>            Reporter: Scott Kurz
>            Priority: Minor
>
> h2. *Recreate steps*
> With either a recent version of 3.9.x or 4.0.0-x, build my recreate plugin 
> and use the j2ee-simple archetype to create a test project then run the test 
> goal like this:
>  # git clone g...@github.com:scottkurz/counter-maven-plugin.git; cd 
> counter-maven-plugin; mvn install
>  # mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes 
> -DarchetypeArtifactId=maven-archetype-j2ee-simple -DarchetypeVersion=1.5 
> -DgroupId=mygroup -DartifactId=myartifact -Dversion=1.0-SNAPSHOT 
> -Dpackage=myco
>  # cd myartifact; {{{}mvn 
> mygroup:counter-maven-plugin:1.0-SNAPSHOT:countTargets{}}}{{{{}}{}}}
> You'll see an artifact resolution failure like this: 
>  
> {{[ERROR] Failed to execute goal on project ear: Could not resolve 
> dependencies for project mygroup:ear:ear:1.0-SNAPSHOT}}
> {{[ERROR] dependency: mygroup:ejbs:jar:1.0-SNAPSHOT (compile)}}
> {{[ERROR] : The following artifacts could not be resolved: 
> mygroup:ejbs:jar:1.0-SNAPSHOT (absent)}}
> h2. *More Details*
>  
> I was able to fix the issue by making this simple change to 
> *ReactorReader.java*
> [https://github.com/apache/maven/pull/2016]
>  
> Note my recreate/test plugin mojo looks like
>  
> {code:java}
> @Mojo( name = "countTargets", defaultPhase = LifecyclePhase.PROCESS_SOURCES, 
> requiresDependencyResolution = ResolutionScope.TEST )
> @Execute(phase = LifecyclePhase.PROCESS_TEST_CLASSES)
> public class MyMojo{code}
>  
>  
> If I understand correctly, the role of the `@Execute` here is not to directly 
> resolve the artifact (since this other stuff, IIUC, happens in a forked 
> Maven)... but rather to enable the test in 
> _*org.apache.maven.ReactorReader.find(MavenProject, Artifact)*_ to pass (the 
> test we use to decide whether to employ this special technique of resolving 
> the artifact to the project output dir): 
>  
>  
> {code:java}
>  if ( project.hasLifecyclePhase( "compile" ) && COMPILE_PHASE_TYPES.contains( 
> type ) ){code}
>  
>  
> I'm not really sure where the list of "types" from *ReactorReader* comes from:
>  
>  
> {code:java}
> privatestaticfinal Collection<String> COMPILE_PHASE_TYPES = new HashSet<>(
> Arrays.asList("jar", "ejb-client", "war", "rar", "ejb3", "par", "sar", "wsr", 
> "har", "app-client"));
> {code}
>  
> It seems there's some overlap with packaging types but also that this is 
> possibly a slightly different layer of abstraction?  
>  
> I wonder though if these types though should align with the types here: 
> [https://github.com/apache/maven/blob/master/impl/maven-impl/src/main/java/org/apache/maven/internal/impl/resolver/type/DefaultTypeProvider.java]
> e.g.
>            
> {code:java}
>      new DefaultType("ejb", Language.JAVA_FAMILY, "jar", null, false, 
> JavaPathType.CLASSES),
>                 new DefaultType("ejb-client", Language.JAVA_FAMILY, "jar", 
> "client", false, JavaPathType.CLASSES),{code}
> That's just a guess grepping through code..haven't traced it through.
>  
> h2. *Workarounds*
>  
> I can avoid the problem either by:
>  # Adding a compile:   `mvn compile  
> mygroup:counter-maven-plugin:1.0-SNAPSHOT:countTargets`
>  # Running a similar sample switching from an 'ejb' package type dependency 
> to a regular 'jar' package
> h2. *References* 
>  * It was working on this issue: 
> [https://github.com/openrewrite/rewrite-maven-plugin/issues/920] that led me 
> to investigate this.
>  * I didn't take the time to digest this but it seems like there might? be 
> some overlap: https://issues.apache.org/jira/browse/MNG-8097
>  * The issue in which ReactorReader was changed to the relevant  code today: 
> https://issues.apache.org/jira/browse/MNG-5898



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

Reply via email to