【问题标题】:Maven dependencies for IBM Websphere packagesIBM Websphere 包的 Maven 依赖项
【发布时间】:2016-04-12 05:12:58
【问题描述】:

我正在尝试将使用 IBM websphere 8.0.0.5 的“经典”JAVA EE 项目转换为 maven 多模块项目,并面临 IBM 依赖项的问题。

我们使用来自以下包的 IBM 类:

  • com.ibm.websphere.asynchbeans
  • com.ibm.websphere.scheduler
  • com.ibm.websphere.ce.cm
  • com.ibm.ws.asynchbeans
  • com.ibm.ws.util.ThreadPool

为了编译我的本地项目,我从 IBM 下载了 was.installer-8.0.0.pm 并将其安装到我的 maven 中使用

mvn install -f "was.installer-8.0.0.pom" -D serverInstallationFolder="C:\Program Files (x86)\IBM\WebSphere\AppServer"

根据命令行输出,这一步是成功的。

然后我按照 IBM 的描述将以下依赖项添加到我的项目中:

在父母中:

<dependency>
 <groupId>com.ibm.tools.target</groupId>
 <artifactId>was</artifactId>
 <version>8.0.0</version>
 <type>pom</type>
 <scope>provided</scope>
</dependency>

在模块中:

 <dependency>
   <groupId>com.ibm.tools.target</groupId>
   <artifactId>was</artifactId>
 </dependency>      

但我仍然无法编译我的项目,因为找不到 IBM 包。

谁能帮我找出并纠正我犯的错误?

编辑

按照 cmets 的 BevynQ 提示后,我将“was_public.jar”复制到“was_public-8.0.0.jar”(在IBM here 中描述)并将其添加到我的存储库中:

mvn install:install-file -Dfile="C:\Program Files (x86)\IBM\WebSphere\AppServer\dev\was_public-8.0.0.jar" -DpomFile="C:\Program Files (x86)\IBM\WebSphere\AppServer\dev\was_public-8.0.0.pom"

然后我将依赖项更改为:

<dependency>
 <groupId>com.ibm.websphere.appserver</groupId>
 <artifactId>was_public</artifactId>
 <version>8.0.0</version>
 <scope>provided</scope>
</dependency>

 <dependency>
   <groupId>com.ibm.websphere.appserver</groupId>
   <artifactId>was</artifactId>
 </dependency>    

这有助于完成导入到 com.ibm.websphere 的编译错误。

我现在仍然打开的是包com.ibm.ws.* 包。有人有想法吗?

编辑 2 我添加了以下依赖项,然后我摆脱了 com.ibm.ws.* 导入错误。

<dependency>
  <groupId>com.ibm.websphere.ws</groupId>
  <artifactId>com.ibm.ws.runtime</artifactId>
  <version>1.0.0</version>
</dependency> 

但它仍然无法编译,因为现在无法找到间接引用(在我的情况下为 commonj.work.WorkManager)。看来我需要为每一件事添加更多的 .jars。没有更简单的方法来一次性提供所有 websphere jar,如上述链接教程中的描述,com.ibm.toolsdependency(不起作用)?

【问题讨论】:

  • 我认为这行不通。您想将所需的库安装到本地商店。 maven.apache.org/guides/mini/guide-3rd-party-jars-local.html。 POM 还不够
  • 在尝试了您的建议后,我已经编辑了我的问题,我可以编译 com.ibm.websphere 包,但仍然缺少几个 com.ibm.ws 包。有谁知道怎么弄?

标签: java maven websphere-8


【解决方案1】:

一般来说,com.ibm.websphere 是供应用程序使用的公共 API(您上面列出的包也是如此),这与 was_public.jar 中的这些一致

但是,com.ibm.ws 包通常是产品内部。请问您使用com.ibm.ws.asynchbeans 包中的哪些接口方法?也许有一个公共 API 替代方案。

关于commonj.work,我可以在 WebSphere Application Server 产品映像中找到它的唯一位置是 WAS/plugins/com.ibm.ws.prereq.commonj-twm.jar,所以看起来您需要使用它来编译。

【讨论】:

  • 用户不应直接访问 WAS_HOME/plugins/ 的内容,因此这可能应该被视为产品问题。 APAR 已用于 WAS_HOME/dev/ 中不可用的其他 API(例如,www-01.ibm.com/support/docview.wss?uid=swg1PM85738)。
  • 例如,我们使用 com.ibm.ws.asynchbeans 包中的 WorkManagerImpl。我不确定我是否被“允许”更改库,因为它是一个生产模块,并且迁移到 maven 和 CI 是(在当前阶段)收集 maven 经验并能够进行 CI 的第一步在将来。感谢您提示 commonj 文件在哪个 jar 中。昨天,我注意到 ibm 文件所在的公司范围内的关系,所以这是我现在尝试的一种方式。但我会记住你的回答,稍后再回复。
【解决方案2】:

这是解决方案,所以我解决了我的依赖问题:

  1. 我将公司存储库管理器 (nexus) 配置为镜像。在这个关系中,所有的 ibm 包都存在。您可以认为这解决了主要问题。
  2. 然后我根据常见的maven样式添加了以下依赖项:

pom.xml 中的依赖项(提取到属性的版本号):

<dependency>
  <groupId>com.ibm.websphere.ws</groupId>
  <artifactId>com.ibm.ws.runtime</artifactId>
  <version>${ibm.ws.runtime.version}</version>
</dependency>


<dependency>
  <groupId>com.ibm.ws.prereq</groupId>
  <artifactId>commonj-twm</artifactId>
  <version>${ibm.ws.prereq.commonj-twm.version}</version>
</dependency>

抱歉,我无法提供所有人都可以使用的“好”解决方案,但 njr 的回答和 BevynQ 的评论有助于让我更清楚地了解并通过手动复制所需的 jar 以“更手动”的方式帮助解决问题。

【讨论】:

  • Nexus 如何解析 IBM 软件包?他们是手动添加的吗(例如第三方存储库)?
【解决方案3】:

我在尝试使用 Maven 版本 3.3.9 构建项目时遇到了这个问题,该项目在 Java 版本 1.8.0_101 上运行,如屏幕截图所示:

这就是我解决它的方法:第 1 步。here 下载 commonj.jar。 第 2 步。 通过在命令提示符中键入 mvn -version 来确定您的 Maven 使用的是哪个 JDK。

第 3 步。 转到该目录并将commonj.jar 文件放在jre/lib/ext 目录中,如下所示。现在您的项目应该在 maven 中构建,没有任何问题。

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 2019-03-23
    • 1970-01-01
    • 2019-12-31
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2023-03-30
    相关资源
    最近更新 更多