我有一个在命令行上构建良好的Maven项目。我想在Eclipse Luna 4.4.1中编辑项目文件,但是当我加载项目时,它会在我的pom.xml文件中报告以下错误:
cvc-datatype-valid.1.2.1:'$ {MYVAR}'不是'boolean'的有效值
cvc-type.3.1.3:元素'enabled'的'$ {MYVAR}'值无效。
此问题与Validating Maven pom.xml when boolean is a property类似,但尚无任何答案。虽然我可以在命令行上通过Maven进行编译,但令人讨厌的是Eclipse不断将这些报告为错误。有没有办法摆脱这些错误而不禁用pom.xml文件其余部分的验证?
根据http://maven.apache.org/pom.html#Properties我正确引用了MYVAR
属性。
以下是我的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>myproject</artifactId>
<groupId>org.mydomain</groupId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<properties>
<spring-version>3.0.2.RELEASE</spring-version>
<MYVAR>false</MYVAR>
</properties>
<repositories>
<repository>
<id>internal_repo</id>
<name>my internal repository for offline use</name>
<url>file://${INT_REPO_HOME}/java/maven_repo</url>
<layout>default</layout>
</repository>
<repository>
<id>central</id>
<url>http://repo1.maven.org/maven2</url>
<releases>
<enabled>${MYVAR}</enabled>
</releases>
<snapshots>
<enabled>${MYVAR}</enabled>
</snapshots>
</repository>
</repositories>
</project>
答案 0 :(得分:5)
Eclipse正在验证POM的XSD,它表示此XML元素的类型为boolean。
布尔值的有效值为true / false,因此当它看到$ {MYVAR}时会引发验证错误...因为Eclipse的插件不执行从“$ {MYVAR}”到“false”的变量转换
但是,如果你进行mvn安装它没有问题,这意味着pom是正确的。
结论,这是一个Elipse插件问题,所以你只能忽略它。
答案 1 :(得分:1)
我认为这是一个时间/订单问题。 maven首先尝试在执行之前构建整个项目模型。所以要收集所有pom.xml来构建它使用存储库的项目的整个模型。在此之后它使用属性并替换有效项目模型(pom.xml)的所有变量
如果您在定义之外使用$ {MYVAR},那应该没问题。对吗?
答案 2 :(得分:0)
这似乎是一个Eclipse问题,因为Eclipse开发人员拒绝承认模板化XML和运行时XML之间的区别。只有在后一种情况下验证才有意义。
他们有一个很好的概念,允许您打开/关闭验证,或将某些转换为警告。但是,在这种情况下,此选项不存在。
人们建议您可以关闭此验证,但我试图了解情况。就个人而言,我对Eclipse所做的任何XSD验证都不感兴趣。
我唯一知道的选择是游说https://bugs.eclipse.org/bugs/