我今天看到了Maven的一个非常奇怪的问题:它正在尝试构建不在我的项目中但来自依赖项的类.mvn compile
崩溃:
... [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] AppConstants.java):[4,12] unmappable character for encoding UTF-8 ...
AppConstants.java
在我的项目中没有,并且搜索grep -r AppConstants .
没有给出任何结果.该类存在于另一个工件中,该工件是我的项目的依赖项.
我设法得到我的项目通过传递编译-Dproject.build.sourceEncoding=Cp1252
到mvn compile
,但这不是解决办法,因为我的项目应该使用utf-8
的编码.果然,当编译这样,我看AppConstants.class
下target/classes/
,但它在哪里可以从何而来?这怎么可能?
最近项目的pom没有任何变化,但我知道依赖项目正在努力迁移到Maven这些天.会发生什么事?
UPDATE
AppConstants.java
我的项目中没有文件,项目AppConstants
中的任何地方都没有提到:
$ grep -ri AppConstants . # finds nothing $ find . | grep -i AppConstants # finds nothing
这AppConstants
存在于我所依赖的另一个项目中.我的电脑上没有其他项目的源代码.我的队友都可以重现这个问题,这不是我的电脑特有的.我们的pom最近没有改变,但我们知道其他团队的pom现在正在发生很大的变化.
我的项目中有一个类使用SomeOther
其他项目中的类.如果我建立使用-Dproject.build.sourceEncoding=Cp1252
,那么建筑工作,而我的target
文件夹我看SomeOther.class
,AppConstants.class
并从其他项目中的其他一些clases产生.如果我从我的项目中删除使用的类SomeOther
,那么我可以正常构建,虽然项目将无法工作,因为它需要其他类.
@Gus:知道它是否存在
SomeOther
,您是否可以制作具有相同行为的公共安全示例项目?如果做不到这一点,请描述层次结构,以及你在哪里运行mvn compile
......你是否有一个多模块项目,而你正在构建一个子项目?
太难创建一个公共安全的样本.我的项目是多模块的,当我mvn compile
在顶部运行时,它在子模块中失败,所以为了更快的迭代,我一直在子模块中运行.结果相同但更快.但是你让我想到:我将检查我们的构建是否.class
为其他子模块中的其他项目生成文件.
共享代码和完整的pom
这是有效的,所以我不能分享完整的代码和pom.如果您要求特定部分,我可以包含匿名片段.