2017-04-05 65 views
1

在我的pom.xml我有这样的:如何解决这些AWS导入?

<instructions> 
    <Embed-Transitive>true</Embed-Transitive> 
    <Export-Package> 
     com.amazonaws.HttpMethod, 
     com.amazonaws.services.s3.* 
    </Export-Package> 
    <Embed-Dependency> 
     gson, 
     aws-java-sdk, 
     jackson-core 
    </Embed-Dependency> 
    ... 

而且作为依赖我有这些:

<dependency> 
    <groupId>com.amazonaws</groupId> 
    <artifactId>aws-java-sdk-s3</artifactId> 
    <version>1.11.115</version> 
</dependency> 

<dependency> 
    <groupId>com.amazonaws</groupId> 
    <artifactId>aws-java-sdk-core</artifactId> 
    <version>1.11.115</version> 
</dependency> 

当我建立我的.jar与mvn clean install并上传到AEM我看到这一点:

enter image description here

什么是红色所有这些“额外”的软件包,它解决不了,怎么能我解决这些问题?

在构建并向AEM上传程序包之前,如何防止发生这种情况?

+0

我不熟悉AEM,但这些软件包都在核心库中。核心也有[一系列依赖关系](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/pom.xml)。因此,如果AEM要求您手动导出依赖关系,那么您的工作已经完成。 – stdunbar

+0

你可以请你发布你的'Import-Package'语句吗?因为我猜它被设置为'*; resolution = optional'。这意味着,基本上Java代码中的每个'import'语句都将被添加到捆绑包'Import-Package'列表中。这有点奇怪,因为您会期望嵌入式jar能够解决这些“依赖关系”。但是这些'Import-Package'包只能通过其他'Export-Package'语句来满足。因此,如果这些“红色”软件包是嵌入式依赖项的一部分,您可以尝试执行' *'。 – Jens

回答

1

红色软件包是您导入的软件包,它们是带有java import的类。这些进口产品的依赖关系需要被嵌入到你的pom中,这个<Embed-Dependency>。或者,您可以安装导出这些软件包的AEM软件包,以便解析软件包导入。

1

当我建立我的MVN的.jar干净安装,并把它上传到AEM

这不是建立AEM项目的正常方式,即你不应该上传只是* .jar文件到您的AEM实例。简而言之,您将创建一个需要安装到您的AEM实例的OSGi包。这个包(如果编译/构建正确)应该包含你所有的代码,它的依赖关系在一个很好的小zip文件中,它应该解决依赖性问题。

或者,如果您只是想上传* .jar文件,那么您需要找到依赖关系并将它们作为单独的jar文件上传或按照this tutorial将一个或多个jar文件转换为OSGi包并上传到您的AEM实例。这是许多第三方专有库的常见做法,但S3库很容易获得,因此可能不是最佳选择(除非有商业案例)。

理想情况下,您的AEM项目的POM应该具有所有AWS S3依赖关系,并将其与OSGi包捆绑在一起,以便组织内的其他依赖项也以标准AEM方式进行管理。

如果您使用的是Eclipse或类似的IDE,那么您可以阅读this tutorial