2011-06-01 72 views
1

我目前正在研究一个已经从Ant迁移到Maven的相当大的项目。实际的构建过程没有问题(它编译和打包源代码的罚款)。将蚂蚁资源生成目标集成到Maven版本

的问题是,我也有很多产生额外资源为项目目标(编译LessCSS,产生&上传文档,生成tld文件自定义标签和功能等)。我不知道我应该如何处理这些任务。让我们以构建CSS的目标为例(其他人或多或少相似,但未连接)。它看起来像这样(简化):

<target name="build.css_js"> 
    <concat destfile="${webapp.dir}/scripts/main.js"> 
     <fileset dir="${webapp.dir}/scripts/src" includes="*.js"/> 
    </concat> 

    <!-- build css files from less sources --> 
    <taskdef name="lesscss" classname="com.asual.lesscss.LessEngineTask" classpathref="libraries" /> 
    <lesscss input="${webapp.dir}/syles/src/input.less" output="${webapp.dir}/styles/output.css" /> 
</target> 

pom.xml我有以下插件设置:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>generate-resources</phase> 
      <configuration> 
       <tasks> 
        <echo message="Hello World from pom.xml"/> 
        <ant target="build.css_js"/> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

我使用的依赖性不再在我们的SVN仓库(因为它们是Maven的管理),所以我切换变量指向Maven的回购库:

<property name="lib.dir" location="${env.HOMEPATH}/.m2/repository" /> 

这是不好的,因为这条道路可能只是我的机器上是有效的。我不知道任何其他的方式来从Maven仓库引用库,我需要它们来运行ant目标。

  • 我的方法好吗,还是有更好的做事方法?
  • 如何解决图书馆问题?
  • 包装项目时需要一些资源,但有些则不需要。 是否存在超出编译/包的范围的生命周期阶段? 我发现我认为符合我需求的site生命周期。
  • 理想情况下,我应该完全放弃ant构建文件,但我不确定这是值得努力使脚本作为maven插件运行(我目前不知道该怎么做)。你怎么看待这件事?

我是Maven的新手,所以有什么建议值得赞赏。

回答

1

通常嵌入antrun调用并不理想,但是如果你没有找到合适的插件来做你需要的东西,那么我不会担心它。如果处理非常简单,那么将它自己嵌入Maven插件实际上很容易,请参阅this example以获取入门帮助。

如果你打算使用antrun,并且依赖jar已经被安装到你的Maven仓库中,你可以配置antrun插件在它的执行过程中使用这些jar作为插件配置的依赖关系。这意味着依赖项将被解析并可供使用,但对您的项目不可见(有助于避免意外包含)。然后,为了访问它们在便携方式,您可以使用:

<property name="lib.dir" location="${settings.localRepository}" /> 

或者你可以使用一些可用于暴露的Maven类路径的antrun插件的其他属性,例如${maven.compile.classpath}antrun documentation了解更多详情。

如果您有多个针对ant的离散执行,您可以在antrun插件中单独配置它们,并为每个插件指定合适的id。下面的示例显示了两个执行,都绑定到流程资源阶段。当然,你需要提供一些实际的目标。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>build-css</id> 
     <phase>generate-resource</phase> 
     <configuration> 
     <target> 
      ... 
     </target> 
     </configuration> 
     <goals> 
     <goal>run</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>build-js</id> 
     <phase>generate-resource</phase> 
     <configuration> 
     <target> 
      ... 
     </target> 
     </configuration> 
     <goals> 
     <goal>run</goal> 
     </goals> 
    </execution> 
    </executions> 
    <dependencies> 
    <dependency> 
     <groupId>some.group.id</groupId> 
     <artifactId>artifactId</artifactId> 
     <version>1.4.1</version> 
    </dependency> 
    <dependency> 
     <groupId>another.group.id</groupId> 
     <artifactId>anotherId</artifactId> 
     <version>1.0.1</version> 
    </dependency> 
    </dependencies> 

+0

谢谢你的提示! – 2011-06-03 16:20:29