[
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)?
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}
<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)?
> Please, advise!
> Many thanks in advance!
> Kind regards,
> Martin
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)