如何将自定义存储库添加到maven-jaxb2-plugin

时间:2014-04-02 14:26:00

标签: java maven elasticsearch xjc maven-jaxb2-plugin

我使用maven-jaxb2-plugin(org.jvnet.jaxb2.maven2)生成资源和xjb绑定,以便为生成的bean添加注释。

这些注释必须包含在插件的类路径中,所以我使用依赖项部分。

如果maven central build中缺少某些依赖项失败。 如何添加存储库以查找插件?

E.g。这个神器不能在maven中心找到

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>1.0.0.M2</version>
</dependency>

但可以在另一个存储库中找到:

<repository>
    <id>spring-libs-milestone</id>
    <name>Spring Milestone Repository</name>
    <url>http://repo.spring.io/libs-milestone</url>
</repository>

插件配置:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.8.3</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>${spring.data.mongodb.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>1.0.0.M2</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <strict>true</strict>
        <verbose>true</verbose>
        <extension>true</extension>
        <removeOldOutput>true</removeOldOutput>
        <schemaDirectory>src/main/resources</schemaDirectory>
        <bindingDirectory>src/main/resources</bindingDirectory>
        <addCompileSourceRoot>true</addCompileSourceRoot>
        <args>
            <arg>-Xannotate</arg>
        </args>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-basics-annotate</artifactId>
                <version>0.6.3</version>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jaxb2_commons</groupId>
                <artifactId>jaxb2-basics</artifactId>
                <version>0.6.3</version>
            </plugin>
        </plugins>
    </configuration>
</plugin>

构建示例: http://azee.people.yandex.net/job/elastic-template/6/console

源代码: https://github.com/azee/elastic-template/tree/nodeps

2 个答案:

答案 0 :(得分:3)

您需要定义pluginRepository而非普通repository

插件及其所有依赖项仅从pluginRepositories解析。这是为了分离代码并构建依赖关系。

添加:

<pluginRepositories>
  <pluginRepository>
    <id>spring-libs-milestone</id>
    <name>Spring Milestone Repository</name>
    <url>http://repo.spring.io/libs-milestone</url>
  </pluginRepository>
</pluginRepositories>

答案 1 :(得分:0)

此处maven-jaxb2-plugin以及jaxb2-basics的作者。 我的建议是将您的依赖项plugin添加到配置中,而不是添加到maven插件的dependency

请参阅此test project

    <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <configuration>
                <extension>true</extension>
                <args>
                    <arg>-Xannotate</arg>
                </args>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics-annotate</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics-test-annox-annotations</artifactId>
                    </plugin>
                </plugins>
            </configuration>
        </plugin>
    </plugins>

我相信这比Maven插件的dependencies要好。 首先,我认为在这种情况下,正常的repo将用于工件解析。 接下来,至少在Maven 2.x的时代,Maven只创建了每个maven插件的一个实例。因此,构建顺序中的第一个定义了插件的依赖项/类路径。在配置中提供依赖项工件不会出现此问题。