1

作業中のプロジェクトのソース ファイルを生成するために、新しい Maven プラグインを作成しました。各ファイルには当然、各ファイルの先頭に会社の著作権情報が必要です。できる限りのことをしようとして、著作権情報をソースにハードコードするのではなく、別のテキスト ファイルに入れたいと思いました。

私のプラグインではgetResourceAsStream()、クラスローダーが提供するメソッドを使用してこのファイルを取得しようとしています:

    InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream(
        "/com/company/java-header.txt"
    );

プラグインを単独でテストすると、このコードは機能します。はjava-header.txtMaven のターゲット ディレクトリの正しい場所に適切に配置され、テストに合格します。

次のステップとして、このプラグインを別の 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ます。

java-header.txtクラスパスからこのファイルを読み取るためにMavenプラグインを取得する方法を知っている人はいますか? 私の知る限り、プラグインのディレクトリにあるターゲットのコンパイル済みファイルを使用してプラグインを実行しています。そこに java-header.txt ファイルがあります。Mavenも出力するURL情報は次のとおりです。

**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
4

1 に答える 1

0

someClass.getResource() はパスを mvn:artifactID/groupID/version として返します。一方、通常の JVM の r ファイルはファイル プロトコルを返します。OSGi ベースの jvm は Maven パスを返します。

于 2012-10-18T09:41:47.940 に答える