我正在运行一个Websphere 7项目。 Pom结构如下:
<parent>
<groupId>company</groupId>
<artifactId>websphere-superpom</artifactId>
<version>version</version>
</parent>
<dependencies>
...
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.5</version>
</dependency>
</dependencies>
...
<dependencies>
...
<dependency>
<groupId>com.ibm.websphere</groupId>
<artifactId>runtime-dependencies</artifactId>
<version>version</version>
<type>pom</type>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencies>
...
<dependency>
<groupId>com.ibm.websphere</groupId>
<artifactId>j2ee</artifactId>
<version>version</version>
</dependency>
</dependencies>
神器j2ee包含几个包,其中还有javax.el
,它在我在项目的pom中声明之前加载。
我使用选项-verbose:class
运行JUnit测试,输出确认了这个问题。
[Loaded javax.el.ExpressionFactory from file:/C:/Program Files (x86)/IBM/SDP/runtimes/base_v7/lib/j2ee.jar]
然后我在Maven控制台中运行以下命令:
mvn dependency:analyze -DcheckDuplicateClasses
我得到的输出是:
[WARNING] Unused declared dependencies found:
...
[WARNING] javax.el:javax.el-api:jar:2.2.5:compile
...
如何告诉Maven从我在项目的pom中声明的库中加载ExpressionFactory?我无法更改websphere-superpom,因为它是公司管理的工件。
编辑: 正如我所说的那样,我试图在我的项目的pom中重新宣布违规依赖:
<dependency>
<groupId>com.ibm.websphere</groupId>
<artifactId>runtime-dependencies</artifactId>
<version>version</version>
<exclusions>
<exclusion>
<groupId>com.ibm.websphere</groupId>
<artifactId>j2ee</artifactId>
</exclusion>
</exclusions>
</dependency>
然后Maven告诉我:
Could not resolve dependencies for project ....: Failure to find com.ibm.websphere:runtime-dependencies:jar in nexus url
答案 0 :(得分:0)
如果您可以修改父依赖项,则可以使用maven exclusions。
在websphere-superpom中:
<dependency>
<groupId>com.ibm.websphere</groupId>
<artifactId>runtime-dependencies</artifactId>
<version>version</version>
<type>pom</type>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
</exclusion>
</exclusions>
</dependency>
修改强>
如果您使用了水的建议,请不要忘记将此运行时依赖性的范围设置为提供。因为现在Maven试图在你的nexus repo中搜索它。