Java 带Maven的SapJco 3.0.11:不允许重命名或重新打包原始归档文件;sapjco3.jar“;

Java 带Maven的SapJco 3.0.11:不允许重命名或重新打包原始归档文件;sapjco3.jar“;,java,maven,sap,Java,Maven,Sap,sap jco连接器的当前版本在运行时强制包含jar的名称。如果与名称(sapjco3.jar)不匹配,将导致异常 JCo初始化失败,java.lang.ExceptionInInitializerError:非法JCo 存档“sap-jco-win-amd-64-3.0.11.jar”。不允许重命名或重新打包原始归档文件“sapjco3.jar” 我们包装了这些库,并在nexus存储库中使用自定义pom部署它们。标准maven构建是不可用的atm,这是此更改/命名工件的标准maven方式的结果

sap jco连接器的当前版本在运行时强制包含jar的名称。如果与名称(sapjco3.jar)不匹配,将导致异常

JCo初始化失败,java.lang.ExceptionInInitializerError:非法JCo 存档“sap-jco-win-amd-64-3.0.11.jar”。不允许重命名或重新打包原始归档文件“sapjco3.jar”

我们包装了这些库,并在nexus存储库中使用自定义pom部署它们。标准maven构建是不可用的atm,这是此更改/命名工件的标准maven方式的结果

当前的解决方法使用此依赖项的系统范围,并将sapjco maven工件复制到项目中的指定文件夹,因为这是强制执行jar文件名并将其作为依赖项保留在构建中的唯一方法。这在同一模块中起作用。系统范围的缺点之一是可传递工件的停用/失败解析。我们需要它,因为sap连接器模块包含在应用程序war模块中。由于打包的工件中不包括系统范围依赖项,我们必须将它们复制到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
      
    • 这将创建一个本地工件,或者您也可以在远程存储库中创建它
    • 从maven下载此依赖项,如下所示:

      
      com.company.sap
      com.sap.conn.jco.sapjco
      1
      

    • 此解决方法可避免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" + "\".");
      }
      

      为什么这张支票要登记?你违反许可证了吗?我不打算违反许可证。结果工件应包含具有指定命名约定的文件。我希望从maven存储库获取所有依赖项,但sap没有提供连接器的mavenized版本。因此,我们创建了自己的maven工件,并将其上传到我们的私有存储库。我认为这个问题正在影响更多的开发者,但还没有找到解决方案。我们也有同样的问题。目前,我们只需要独立的应用程序(实际上是SAP和企业应用程序之间的中间件客户端)。所以我们使用的是maven汇编插件。这样,我们只需在结果工件(ZIP)中显式地重命名这个JAR。也许maven war插件中也有类似的配置选项?另外:3.0.11版也有这个问题。在此之前,我们使用了3.0.6,我们没有这个问题。我不知道这些建议会起作用:1)直接在WEB-INF/lib中使用正确名称的jar文件,而不是将其作为依赖项添加。2) 使用maven war插件的outputFilenameMapping特性在war中重命名jar。