sap jco 连接器的当前版本在运行时强制使用包含 jar 的名称。如果它与名称 (sapjco3.jar) 不匹配,这将导致异常。
JCo 初始化失败,出现 java.lang.ExceptionInInitializerError: Illegal JCo archive "sap-jco-win-amd-64-3.0.11.jar"。不允许重命名或重新打包原始存档“sapjco3.jar”
我们包装了这些库,并在我们的 nexus 存储库中使用自定义 pom 部署它们。由于此更改/命名工件的标准 maven 方式,标准 maven 构建无法使用 atm。
当前的解决方法使用此依赖项的系统范围并将 sapjco maven 工件复制到项目中的指定文件夹,因为这是强制执行 jar 文件的名称并将其作为依赖项保留在构建中的唯一方法。这在同一个模块中工作。系统范围的缺点之一是传递工件的停用/失败解析。我们需要它,因为 sap 连接器模块包含在应用程序战争模块中。由于系统范围依赖项不包含在打包的工件中,我们必须将它们复制到 web-inf/lib 文件夹并在清单中添加一个类路径条目。
构建工作,当我从父/根模块启动它时,但由于系统范围依赖性,当它在子模块中启动时失败。我们现在可以接受该解决方案,但我绝对不满意。
是否有推荐的方法将 sapjco 与 maven 一起使用,或者使用更简单的方法来生成依赖于平台的工件,其中包括本机库和具有指定名称的 jar?SAP 是否会重新考虑这项检查,因为以前的版本不包括它?
编辑:
我遇到了同样的问题,下面是我修复它的方法(简而言之,解决它): 1. 在命令提示符中运行命令
mvn install:install-file
-Dfile=sapjco3.jar
-DgroupId=com.company.sap
-DartifactId=com.sap.conn.jco.sapjco
-Dversion=1.0
-Dpackaging=jar
Run Code Online (Sandbox Code Playgroud)
从maven下载这个依赖,如下图:
<dependency>
<groupId>com.company.sap</groupId>
<artifactId>com.sap.conn.jco.sapjco</artifactId>
<version>1.0</version>
</dependency>
这种解决方法可以避免 sapjco3 错误:
if (!jarname.equals("sapjco3.jar")
&& !jarname.startsWith("com.sap.conn.jco")
&& !jarname.equals("sapjco3_IDE.jar")
&& Package.getPackage("org.apache.maven.surefire.booter") == null
&& Package.getPackage("org.eclipse.jdt.internal.junit.runner") == null) {
throw new ExceptionInInitializerError("Illegal JCo archive \"" + jarname + "\". It is not allowed to rename or repackage the original archive \"" + "sapjco3.jar" + "\".");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7611 次 |
| 最近记录: |