You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "elharo (Jira)" <ji...@apache.org> on 2022/10/23 13:04:00 UTC

[jira] [Commented] (MWAR-351) Optional dependency not being included in the WEB-INF/lib folder

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

elharo commented on MWAR-351:
-----------------------------

This might be working as intended. "When A declares B as an optional dependency in its POM, this relationship remains unchanged. Its just like a normal build where Project-B will be added in its classpath....But when another project(Project-X) declares Project-A as a dependency in its POM, the optional dependency takes effect. You'll notice that Project-B is not included in the classpath of Project-X; you will need to declare it directly in your POM in order for B to be included in X's classpath." That is, it's all about the classpaths. 


So what's the classpath and what's the app in this scenario? In particular, is there a classpath for the web module that is unique to the web module? Or is there a separate, larger process that includes the files from the web module but also includes other things in the classpath? 

Another way of thinking about it: is there an app that depends on the web module that is running? (in which case the optional dependency should not be inlcuded) or is the web module the app? (in which case it should be included). 

Now if multiple class loaders are being used then it gets still more complex. I'm personally not sure what the right answer is here. 




> Optional dependency not being included in the WEB-INF/lib folder
> ----------------------------------------------------------------
>
>                 Key: MWAR-351
>                 URL: https://issues.apache.org/jira/browse/MWAR-351
>             Project: Maven WAR Plugin
>          Issue Type: Bug
>    Affects Versions: 2.2
>            Reporter: Hockchai Lim
>            Priority: Minor
>
> I've a maven web module that has several dependencies that are declared with <optional>true</optional> in pom.xml.  For example:
> 		<dependency>
> 			<groupId>log4j</groupId>
> 			<artifactId>log4j</artifactId>
> 			<optional>true</optional>
> 		</dependency>
> When performing packaging of this project, Maven WAR Plugin is not including those optional dependencies to the WEB-INF/lib folder, which I think is incorrect.  According to  https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html, optional dependency should work like transitive dependency for this web module.  Optional dependency should only be ignored on projects/modules that reference this web modle.
> Below is the relevant sections from https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html link:
> How do optional dependencies work?
> Project-A -> Project-B
> The diagram above says that Project-A depends on Project-B. When A declares B as an optional dependency in its POM, this relationship remains unchanged. Its just like a normal build where Project-B will be added in its classpath.
> Project-X -> Project-A
> But when another project(Project-X) declares Project-A as a dependency in its POM, the optional dependency takes effect. You'll notice that Project-B is not included in the classpath of Project-X; you will need to declare it directly in your POM in order for B to be included in X's classpath.



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