2015-10-28 53 views
4

我正在写一个基于的Xtext代码生成器,可以被称为内运行:检查Java代码Maven插件

  • 直接(使用main(String[])法)
  • 在Eclipse中(作为Eclipse代码发电机插件)
  • 通过“XTEXT - Maven的插件”

现在我必须要解决一些具体的Maven的问题。为了做到这一点,我需要知道我的代码是否在Maven内部运行。

我的第一个想法是检查maven.home系统属性是这样的:

if (System.getProperty("maven.home") != null) { 
    // In Maven 
} 

是否有这样做的更好的办法?

+0

Maven不_run_代码,它编译它。我不确定你想在这里解决什么具体问题。你用'exec-maven-plugin'运行一些代码吗? – Tunaki

+0

不,我正在maven插件中运行代码! –

+0

难道你不能修改Maven插件来设置一些自定义系统属性吗? – Tunaki

回答

1

除非您编写了Maven插件,并且您的代码是该Maven插件的一部分,并且您正在通过将该代码添加到build/plugins/plugin区域中来配置该代码,否则很可能只使用Maven编译。

检查一个环境变量不会告诉你,如果你是“在maven插件中”,因为即使maven没有运行也存在环境变量。要查看你是否在“maven插件中”,你需要问Maven做依赖注入,看看它是否失败(这是通过丛容器完成的,如果你不知道我在说什么,那么你又不是在maven插件中)。

我99%确定你的代码在要求maven编译时失败。这可能是由于您的编译器配置比您使用的IDE有更严格的要求。如果是这样,最好的答案是修复您的代码以符合更严格的Maven要求;因为通常需要严格的要求来确保代码在更多场景下正常运行。

我也会检查你的maven构建配置(pom.xml),看它是否使用与你的IDE相同版本的java。有时候当你配置你的IDE时,你选择了一个不同的编译级别(比如java 1.8),而不是你的maven pom.xml使用的(比如Java 1.7)。

+0

我正在编写一个代码生成器,我可以直接调用(独立)或通过第三方maven-plugin(Xtext),我无法轻松更改/扩展。 (在问题中加入了这个) –

+0

好的,Xtext与Tycho插件相关。基本上任何触及Tycho插件的东西都是一个Eclipse环境构建问题,而不是一个真正的Maven问题。基本上Tycho是令Eclipse可以在Maven内部构建的憎恶,但实际上并不允许Maven做什么_it做得最好,这是管理构建配置。我在XText插件的某个地方下了赌注,它有效地调用了你构建的命令行等效工具;但是,考虑到它需要Tycho,你可能会搜索Eclipse/Tycho bug,而不是Maven。 –