我創建了一個新的Maven插件來爲我正在處理的項目生成一些源文件。每個文件自然需要在每個文件頂部的公司版權信息。爲盡力做到最好,我想將版權信息放在單獨的文本文件中,而不是源代碼中的硬編碼。Maven插件類加載器找不到應該在類路徑中的文件
在我的插件,我想使用的類加載器提供的getResourceAsStream()
方法來獲得該文件:
InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream(
"/com/company/java-header.txt"
);
當我隔離測試插件,此代碼的工作。將java-header.txt
正確放置在Maven的目標目錄中正確的位置,並通過測試。
現在下一步,我想在另一個Maven模塊中使用這個插件。如果我不包含每個java文件的版權標題,插件將按預期工作。所以我知道這不是我編寫Maven插件的另一個問題。
當我運行與上面的代碼的插件,我得到以下異常:
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
... 20 more
Caused by: java.lang.ExceptionInInitializerError
at com.company.AbstractJavaSchemaFile.generate(AbstractJavaSchemaFile.java:12)
at com.company.AbstractJavaSchemaFile.generateAndWriteToFile(AbstractJavaSchemaFile.java:8)
at com.company.SchemaGenerator.generateSchemaBaseClass(SchemaGenerator.java:41)
at com.company.SchemaGenerator.generateSchemaFiles(SchemaGenerator.java:36)
at com.company.SchemaGenerator.execute(SchemaGenerator.java:28)
at com.company.SchemaGenerator.execute(SchemaGenerator.java:20)
at com.company.SchemaGeneratorMojo.execute(SchemaGeneratorMojo.java:37)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
... 20 more
Caused by: com.company.SchemaGeneratorException: Cannot find [com/company/java-header.txt] in your classpath.
at com.company.JavaSchemaFileBuilder.verifyJavaHeaderIsFoundInClassPath(JavaSchemaFileBuilder.java:47)
at com.company.JavaSchemaFileBuilder.readJavaHeader(JavaSchemaFileBuilder.java:31)
at com.company.JavaSchemaFileBuilder.<clinit>(JavaSchemaFileBuilder.java:15)
錯誤com.company.SchemaGeneratorException: Cannot find [com/company/java-header.txt] in your classpath
是一個自定義錯誤消息。當類加載器返回的InputStream
爲null
時,它會拋出此異常。
有沒有人有一個想法,我怎麼能得到Maven插件讀取從classpath這個java-header.txt
文件?據我所知,它使用插件目錄中的目標編譯文件來運行插件。 java-header.txt文件就在那裏。這裏是URL信息的Maven還會打印出:
**urls[0] = file:/C:/Path/to/my/project/my-maven-plugin/target/classes/**
urls[1] = file:/C:/Users/me/.m2/repository/org/codehaus/plexus/plexus-utils/2.0.6/plexus-utils-2.0.6.jar
urls[2] = file:/C:/Users/me/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
urls[3] = file:/C:/Users/me/.m2/repository/org/sonatype/sisu/sisu-inject-bean/2.3.0/sisu-inject-bean-2.3.0.jar
urls[4] = file:/C:/Users/me/.m2/repository/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0-no_aop.jar
urls[5] = file:/C:/Users/me/.m2/repository/org/sonatype/sisu/sisu-guava/0.9.9/sisu-guava-0.9.9.jar
urls[6] = file:/C:/Users/me/.m2/repository/commons-io/commons-io/1.2/commons-io-1.2.jar
urls[7] = file:/C:/Users/me/.m2/repository/dom4j/dom4j/1.3/dom4j-1.3.jar
你能告訴我們你正在使用maven插件嗎? – Attila