Maven enforcer插件和缺少的依赖项

时间:2013-11-21 23:51:06

标签: java maven dependencies maven-enforcer-plugin maven-lifecycle

这是一个最小的项目:

<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>
    <groupId>com.test</groupId>
    <artifactId>enforcer</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>1.3.1</version>
                <executions>
                    <execution>
                        <id>enforce-env</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <rules>
                        <requireProperty>
                            <property>custom</property>
                            <message>You must set custom property.</message>
                        </requireProperty>
                    </rules>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.test</groupId>
            <artifactId>enforcer-dep</artifactId>
            <version>1.0.0</version>
            <classifier>${custom}</classifier>
        </dependency>
    </dependencies>
</project>

运行时:

mvn -Dcustom=some-value validate

验证顺利。

运行时:

mvn enforcer:enforce

或从validateprocess-resources

的任何阶段
mvn validate
mvn initialize
mvn generate-sources
mvn process-sources
mvn generate-resources
mvn process-resources

我预料到会失败并显示消息:

[...]
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce-env) @ enforcer ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireProperty failed with message:
You must set custom property.
[...]

但当我从compiledeploy运行任何其他(后期)阶段时,例如:

mvn install

我收到有关缺少依赖项的错误,但没有因强制执行器插件导致的失败:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building enforcer 1.0.0
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for com.test:enforcer-dep:jar:${custom}:1.0.0 is missing, no dependency information available
Downloading: http://repo.maven.apache.org/maven2/com/test/enforcer-dep/1.0.0/enforcer-dep-1.0.0-${custom}.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.983s
[INFO] Finished at: Fri Nov 22 09:22:24 CET 2013
[INFO] Final Memory: 7M/152M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project enforcer: Could not resolve dependencies for project com.test:enforcer:jar:1.0
.0: Could not transfer artifact com.test:enforcer-dep:jar:${custom}:1.0.0 from/to central (http://repo.maven.apache.org/
maven2): Illegal character in path at index 84: http://repo.maven.apache.org/maven2/com/test/enforcer-dep/1.0.0/enforcer
-dep-1.0.0-${custom}.jar -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

它看起来像执行器插件根本没有被执行,或者在运行compile及以后的阶段之前可以构建项目之前先检查依赖项。

但是为什么在运行process-resources时不会检查依赖项?

1 个答案:

答案 0 :(得分:1)

显然,您似乎已根据错误消息更改了maven安装的设置:

[WARNING] Some problems were encountered while building the effective settings
[WARNING] expected START_TAG or END_TAG not TEXT (position: TEXT seen ...ever maven must make a connection to a remote s
erver.\n   |-->\n  <s... @111:5)  @ C:\programs\Maven\3\bin\..\conf\settings.xml

这意味着首先清理conf / settings.xml文件。最好是使用通过安装提供的默认文件。如果您需要进行修改,请在用户settings.xml $HOME/.m2/settings.xml或Windows C:/Users/UserName/.m2/settings.xml

中执行此操作

除此之外我不知道你喜欢用这样的东西来实现:

[WARNING] The POM for com.test:enforcer-dep:jar:${custom}:1.0.0 is missing, no dependency information available
Downloading: http://repo.maven.apache.org/maven2/com/test/enforcer-dep/1.0.0/enforcer-dep-1.0.0-${custom}.jar