IntelliJ中的构建模块实际上为maven模块做了什么

时间:2017-10-09 21:05:59

标签: maven intellij-idea aem maven-plugin sling-models

当我跑步时

mvn clean install

对于我的maven模块然后它编译好了。没有问题。 但是当我在IntelliJ中打开我的pom.xml文件时,我选择了Build - >构建模块然后我得到以下问题:

Information:javac 1.8.0_144 was used to compile java sources
Information:Module "mymodule" was fully rebuilt due to project configuration/dependencies changes
Information:09.10.2017 21:16 - Compilation completed with 3 errors and 3 warnings in 23s 991ms
C:\somepath\mymodule\pom.xml
Error:Error:osgi: [mymodule] Exception: java.lang.ClassNotFoundException: org.apache.sling.bnd.models.ModelsScannerPlugin not found, parent:  java.net.URLClassLoader@29453f44 urls:[] exception:java.lang.ClassNotFoundException: org.apache.sling.bnd.models.ModelsScannerPlugin
Error:Error:osgi: [mymodule] Failed to load plugin org.apache.sling.bnd.models.ModelsScannerPlugin;generatePackagesHeader=true, error: java.lang.ClassNotFoundException: org.apache.sling.bnd.models.ModelsScannerPlugin not found, parent:  java.net.URLClassLoader@29453f44 urls:[] exception:java.lang.ClassNotFoundException: org.apache.sling.bnd.models.ModelsScannerPlugin 
Error:Error:osgi: [mymodule] Cannot load the plugin org.apache.sling.bnd.models.ModelsScannerPlugin

这是一个带有AEM代码的模块,它使用maven-sling-plugin。它适用于项目中的其他开发人员。因为它直接从maven执行时工作我试图理解IntelliJ在后台做什么。但实际上,我的问题是那些编译问题。

据我所知,当Build完成后,IntelliJ不会调用maven。任何想法如何找到从IntelliJ运行和直接从Maven运行的区别?

2 个答案:

答案 0 :(得分:0)

请检查您的核心pom文件。它应该包含这样的插件部分:

<plugin> <!-- Enable registration of Sling Models classes via bnd plugin --> org.apache.sling.bnd.models.ModelsScannerPlugin, <!-- Allow the processing of SCR annotations via a bnd plugin --> org.apache.felix.scrplugin.bnd.SCRDescriptorBndPlugin;destdir=${project.build.outputDirectory} </plugin>

但是,如果您使用aem原型创建了一个项目,则标签看起来像是'<_plugin>

答案 1 :(得分:-1)

IntelliJ Build Error Screenshot

这里发生的是,使用当前的ClassLoader无法找到ModelScanner插件。原因可能是您使用的是 IntelliJ IDEA Ultimate ,该软件带有一个预安装的名为 OSGI插件。如果此OSGI插件处于活动状态,它将确定用于构建OSGI相关项目的类加载器。

因此,只需在IntelliJ中停用此Osmorc插件,即可使您的构建从项目POM.xml文件中maven-bundle-plugin的配置中提到的ModelScannerPlugin恢复到类加载器,这应该可以解决该问题。

IntelliJ Osmorc Plugin

如果仍然导致类似的Maven构建错误,请确保将Maven依赖项“ org.apache.sling.bnd.model”添加到POM.xml文件中的maven-bundle-plugin。

<!-- Apache Felix Bundle Plugin -->
<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>3.3.0</version>
    <inherited>true</inherited>
    <extensions>true</extensions>
    <executions>
        <!-- Configure extra execution of 'manifest' in process-classes phase to make sure SCR metadata is generated before unit test runs -->
        <execution>
            <id>scr-metadata</id>
            <goals>
                <goal>manifest</goal>
            </goals>
            <configuration>
                <supportIncrementalBuild>true</supportIncrementalBuild>
            </configuration>
        </execution>
    </executions>
    <configuration>
        <exportScr>true</exportScr>
        <instructions>
            <!-- Enable processing of OSGI DS component annotations -->
            <_dsannotations>*</_dsannotations>
            <!-- Enable processing of OSGI metatype annotations -->
            <_metatypeannotations>*</_metatypeannotations>
            <_plugin>org.apache.sling.bnd.models.ModelsScannerPlugin;generatePackagesHeader=true</_plugin>
        </instructions>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.bnd.models</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</plugin>