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

Martin Todorov updated YETUS-897:
---------------------------------
    Description: 
Hi,

A transitive dependency of our Gradle project requires {{compile group: 
'org.apache.yetus', name: 'audience-annotations', version: '0.10.0'}}. It 
appears we may be hitting a [bug in 
Gradle|https://github.com/gradle/gradle/issues/10058] in that it quite possibly 
doesn't handle {{system}}-scoped and {{optional}} dependencies properly.

I had a look at your project's {{pom.xml}} files and there are actually issues 
with it as well.

Consider the following snippet:
{code:java}
  <profiles>
    <profile>
      <id>jdk1.8</id>
      <activation>
        <jdk>(,1.8]</jdk>
      </activation>
      <dependencies>
        <dependency>
          <!-- Version and location set in project pom -->
          <groupId>jdk.tools</groupId>
          <artifactId>jdk.tools</artifactId>
          <scope>system</scope>
          <!-- Mark as optional so that it isn't taken transitively -->
          <optional>true</optional>
        </dependency>
      </dependencies>
    </profile>
  </profiles>

  <dependencies>
    <dependency>
      <!-- Version and location set in project pom -->
      <groupId>jdk.tools</groupId>
      <artifactId>jdk.tools</artifactId>
      <scope>system</scope>
      <!-- Mark as optional so that it isn't taken transitively -->
      <optional>true</optional>
    </dependency>
  </dependencies>
{code}
What's the point in both having the {{jdk.tools}} dependencies define in a 
profile and then also in the main {{<dependencies/>}} section? If you move this 
dependency into the profile and remove the one from the main 
{{<dependencies/>}} section, and make the profile activated via a system 
property, or activate it through your {{settings.xml}} via the 
{{activeProfile}} section, this should be okay.

I agree that theoretically, this is bad Maven practice, because it breaks build 
portability, but on the other hand, you're already breaking build portability 
by declaring a {{system}}-scoped dependency.

Is it really necessary to depend on the {{tools.jar}}? If you're using a JDK to 
build the code, you should always have it on your classpath? What seems to be 
the issue that you're trying to solve, (which I appear to be missing)?

I haven't gone through all of your project's {{pom.xml}} files, but I suspect 
the same fix might be required elsewhere as well.

Please, advise!

Many thanks in advance!

Kind regards,

Martin

  was:
Hi,

A transitive dependency of our Gradle project requires {{compile group: 
'org.apache.yetus', name: 'audience-annotations', version: '0.10.0'}}. It 
appears we may be hitting a [bug in 
Gradle|https://github.com/gradle/gradle/issues/10058] in that it quite possibly 
doesn't handle {{system}}-scoped and {{optional}} dependencies properly.

I had a look at your project's {{pom.xml}} files and there are actually issues 
with it as well.

Consider the following snippet:
{code:java}
  <profiles>
    <profile>
      <id>jdk1.8</id>
      <activation>
        <jdk>(,1.8]</jdk>
      </activation>
      <dependencies>
        <dependency>
          <!-- Version and location set in project pom -->
          <groupId>jdk.tools</groupId>
          <artifactId>jdk.tools</artifactId>
          <scope>system</scope>
          <!-- Mark as optional so that it isn't taken transitively -->
          <optional>true</optional>
        </dependency>
      </dependencies>
    </profile>
  </profiles>

  <dependencies>
    <dependency>
      <!-- Version and location set in project pom -->
      <groupId>jdk.tools</groupId>
      <artifactId>jdk.tools</artifactId>
      <scope>system</scope>
      <!-- Mark as optional so that it isn't taken transitively -->
      <optional>true</optional>
    </dependency>
  </dependencies>
{code}
What's the point in both having the {{jdk.tools}} dependencies define in a 
profile and then also in the main {{<dependencies/>}} section? If you move this 
dependency into the profile and remove the one from the main 
{{<dependencies/>}} section, and make the profile activated via a system 
property, or activate it through your {{settings.xml}} via the 
{{activeProfile}} section, this should be okay.

I agree that theoretically, this is bad Maven practice, because it breaks build 
portability, but on the other hand, you're already breaking build portability 
by declaring a {{system}}-scoped dependency.

Is it really necessary to depend on the {{tools.jar}}? If you're using a JDK to 
build the code, you should always have it on your classpath? What seems to be 
the issue that you're trying to solve, (which I appear to be missing)?

Please, advise!

Many thanks in advance!

Kind regards,

Martin


> Incorrect usage of Maven profile
> --------------------------------
>
>                 Key: YETUS-897
>                 URL: https://issues.apache.org/jira/browse/YETUS-897
>             Project: Yetus
>          Issue Type: Bug
>          Components: Audience Annotations
>            Reporter: Martin Todorov
>            Priority: Major
>
> Hi,
> A transitive dependency of our Gradle project requires {{compile group: 
> 'org.apache.yetus', name: 'audience-annotations', version: '0.10.0'}}. It 
> appears we may be hitting a [bug in 
> Gradle|https://github.com/gradle/gradle/issues/10058] in that it quite 
> possibly doesn't handle {{system}}-scoped and {{optional}} dependencies 
> properly.
> I had a look at your project's {{pom.xml}} files and there are actually 
> issues with it as well.
> Consider the following snippet:
> {code:java}
>   <profiles>
>     <profile>
>       <id>jdk1.8</id>
>       <activation>
>         <jdk>(,1.8]</jdk>
>       </activation>
>       <dependencies>
>         <dependency>
>           <!-- Version and location set in project pom -->
>           <groupId>jdk.tools</groupId>
>           <artifactId>jdk.tools</artifactId>
>           <scope>system</scope>
>           <!-- Mark as optional so that it isn't taken transitively -->
>           <optional>true</optional>
>         </dependency>
>       </dependencies>
>     </profile>
>   </profiles>
>   <dependencies>
>     <dependency>
>       <!-- Version and location set in project pom -->
>       <groupId>jdk.tools</groupId>
>       <artifactId>jdk.tools</artifactId>
>       <scope>system</scope>
>       <!-- Mark as optional so that it isn't taken transitively -->
>       <optional>true</optional>
>     </dependency>
>   </dependencies>
> {code}
> What's the point in both having the {{jdk.tools}} dependencies define in a 
> profile and then also in the main {{<dependencies/>}} section? If you move 
> this dependency into the profile and remove the one from the main 
> {{<dependencies/>}} section, and make the profile activated via a system 
> property, or activate it through your {{settings.xml}} via the 
> {{activeProfile}} section, this should be okay.
> I agree that theoretically, this is bad Maven practice, because it breaks 
> build portability, but on the other hand, you're already breaking build 
> portability by declaring a {{system}}-scoped dependency.
> Is it really necessary to depend on the {{tools.jar}}? If you're using a JDK 
> to build the code, you should always have it on your classpath? What seems to 
> be the issue that you're trying to solve, (which I appear to be missing)?
> I haven't gone through all of your project's {{pom.xml}} files, but I suspect 
> the same fix might be required elsewhere as well.
> Please, advise!
> Many thanks in advance!
> Kind regards,
> Martin



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to