依赖于<classifier>且没有<classifier>的dependencyManagement

时间:2014-02-18 12:27:56

标签: java maven tomcat jboss guava

我在我的应用程序中使用了几个模块中的guava。 我在Tomcat上部署了这个应用程序,所以我在模块中使用了这个依赖项

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
</dependency>

现在我需要在Tomcat和JBoss上部署这个应用程序。对于JBoss,我需要使用与<classifier>cdi1.0</classifier>

相同的依赖关系
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <classifier>cdi1.0</classifier>
</dependency>

我正在考虑在我的root pom.xml中使用配置文件,例如

<profiles>
    <profile>
        <id>tomcat</id>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                    <version>${guava.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </profile>
    <profile>
        <id>jboss</id>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                    <version>${guava.version}</version>
                    <classifier>cdi1.0</classifier>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </profile>
</profiles>

现在,当我成功运行mvn clean install -Ptomcat项目构建时,但当我运行mvn clean install -Pjboss时,我得到例外:

The project [...] has 1 error 'dependencies.dependency.version'
for com.google.guava:guava:jar is missing.

我认为导致此错误的原因是我需要更改所有模块

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
</dependency>

<profiles>
    <profile>
        <id>tomcat</id>
        <dependencies>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>jboss</id>
        <dependencies>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <classifier>cdi1.0</classifier>
            </dependency>
        </dependencies>
    </profile>
</profiles>

是否有更简单的方法可以让这个项目在Tomcat和JBoss上运行?现在我需要在使用guava的所有模块中复制相同的代码。

1 个答案:

答案 0 :(得分:3)

您定义了${guava.version}吗?在pom.xml中查找<properties>

<properties>
    <guava.version>15.0</guava.version>
    <!-- another project properties here -->
</properties>

此外,current version of Guava (16.0.1 as of writing this answer) is CDI agnostic,因此你应该使用简单的依赖声明,而不需要为Tomcat / JBoss使用不同的配置文件或使用cdi1.0分类器:

<properties>
    <guava.version>16.0.1</guava.version>
    <!-- another project properties here -->
</properties>

<!-- <dependencies> -->

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>${guava.version}</version>
</dependency>

P.S。在Guava 15.0(as a bug workaround)中<classifier>cdi1.0</classifier>只有 ,所以如果由于某种原因你被困在15.0上,你可能不应该使用${guava.version}而是硬编码<version>15.0</version> ...