小编nat*_*han的帖子

Maven生成源无法解析依赖关系

我在maven中有一个使用JAXB生成的源的多模块项目:

    parent
        module A
        module B (depends on module A)
Run Code Online (Sandbox Code Playgroud)

没有JAXB,一切都很好.当我将JAXB插件添加到模块B时,maven抱怨:

   Failed to execute goal on project moduleB: Could not resolve dependencies for 
   project groupId:A:jar:1.7.0: Could not find artifact groupId:A:jar:1.7.0: 
   in thirdparty (http://10.0.0.2:8081/nexus/content/repositories/thirdparty)
Run Code Online (Sandbox Code Playgroud)

据我所知,这是因为jaxb maven插件要求在生成源阶段,在编译模块A之前解析所有依赖关系.我们没有在我们的本地存储库中安装模块A的机制 - 我们从不需要它,因为两个模块都在同一个git存储库中.

我发现的丑陋解决方案是这样的:

    parent
        module A
        module B (depends on module A & C)
        module C (contains only JAXB generate-sources)
Run Code Online (Sandbox Code Playgroud)

JAXB不需要模块A,因此所有内容都会编译.这个解决方案确实有效,但很难看.通常模块包含有用的代码,但是为了将有用的代码放在模块C中,我必须使它依赖于模块A而导致相同的错误.(切换到不同的JAXB插件不起作用,因为它还在生成源阶段解决了依赖关系.)

问题:有没有办法在不创建另一个模块的情况下避免这种依赖?

(可能的解决方案可能涉及为模块B添加阶段或范围,更改模块B需要模块A的依赖关系的范围,因此在生成源之后或创建排除时不需要它,因此JAXB不会查找特别的依赖.)

以下所有内容都是pom.xml文件的极简主义版本.它来自工作的poms,但我不是100%肯定它会以现在的形式编译.

父/ pom.xml中:

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <artifactId>artFacts</artifactId>
    <groupId>com.group</groupId>
    <version>1.7.0</verison>

    <repositories>
        <repository>
            <id>thirdparty</id>
            <url>http://10.0.0.2:8081/nexus/content/repositories/thirdparty</url>
        </repository>
    </repositories>

    <modules>
        <module>modA</module>
        <module>modB</module>
    </modules> …
Run Code Online (Sandbox Code Playgroud)

java jaxb2 maven

6
推荐指数
0
解决办法
1310
查看次数

标签 统计

java ×1

jaxb2 ×1

maven ×1