2

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

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

如果 Maven 中央构建中缺少的某些依赖项失败。如何添加存储库以在插件中查找?

例如,在 maven Central 中找不到这个工件

<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

4

2 回答 2

4

您需要定义 apluginRepository而不是 normal repository

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

所以添加:

<pluginRepositories>
  <pluginRepository>
    <id>spring-libs-milestone</id>
    <name>Spring Milestone Repository</name>
    <url>http://repo.spring.io/libs-milestone</url>
  </pluginRepository>
</pluginRepositories>
于 2014-04-02T15:00:10.327 回答
0

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

请参阅此测试项目

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

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

于 2014-04-04T22:38:50.893 回答