我正在尝试在ACS Commons' MCP Tool
中编写一个自定义类在“ pom.xml”中包含“ azure storage” api,如下所示:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-storage</artifactId>
<version>8.0.0</version>
</dependency>
构建运行正常,没有任何编译错误,但是在运行程序时,我在错误日志中看到以下内容:
示例用法:
import com.microsoft.azure.storage.CloudStorageAccount;
..
public class AzureAssetIngestor extends AssetIngestor {
private CloudStorageAccount storageAccount;
..
storageAccount = CloudStorageAccount.parse(storageConnectionString);
执行程序时日志错误
原因:java.lang.ClassNotFoundException:com.adobe.acs.acs-aem-commons-bundle找不到com.microsoft.azure.storage.CloudStorageAccount
Caused by: java.lang.ClassNotFoundException: com.microsoft.azure.storage.CloudStorageAccount not found by com.adobe.acs.acs-aem-commons-bundle [521]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
感谢任何帮助!
答案 0 :(得分:1)
AEM项目有两种类型的依赖项:
在Maven中,您定义编译时间依赖项。因此,向您的pom.xml
添加依赖项将使其仅在Maven的构建(编译时)期间可用。
作为开发人员,您要确保在运行时期间这些依赖项也可用。基本上可以通过三种方式实现这一目标:
这很明显,但是您应该选择选项2或3。这两种方法都有其优点和缺点。选项2的(相对)大问题是,并非您的所有依赖项都是OSGi捆绑包。因此,要使其正常工作,您需要将它们转换为OSGi捆绑软件。这不是火箭科学,而是要记住的另一件事。嵌入您的依赖关系比较容易,但是我个人不太喜欢这种解决方案。
答案 1 :(得分:0)
通过@Jens输入,可以手动/有效地安装捆绑包。
这是解决方案:
pom.xml
<artifactId>maven-bundle-plugin</artifactId>
<Import-Package>
com.microsoft.azure.*;resolution:=optional,
...
</Import-Package>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-storage</artifactId>
<version>8.0.0</version>
<scope>provided</scope>
</dependency>
然后转到AEM捆绑软件(如http://localhost:4502/system/console/bundles)来手动安装捆绑软件。您可以使用以下任意一种。
选项1:
选项2: