Java 减轻Maven pom.xml文件的冗长(或:粉丝对Maven的批评)

Java 减轻Maven pom.xml文件的冗长(或:粉丝对Maven的批评),java,maven-2,project-management,build-process,Java,Maven 2,Project Management,Build Process,我喜欢maven。我甚至非常喜欢它。 自从我从Ant切换到它之后,我节省了大量的工作时间,包括构建构建文件、管理依赖项等,并在我的源代码管理存储库中节省了大量的空间 问题是maven文件太冗长。并不是说Ant文件的详细程度更低,而是它们的详细程度适合它们的工作 例如,而不是写: <dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId&

我喜欢maven。我甚至非常喜欢它。 自从我从Ant切换到它之后,我节省了大量的工作时间,包括构建构建文件、管理依赖项等,并在我的源代码管理存储库中节省了大量的空间

问题是maven文件太冗长。并不是说Ant文件的详细程度更低,而是它们的详细程度适合它们的工作

例如,而不是写

<dependencies>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
<dependency>
    <groupId>com.myosproject</groupId>
    <artifactId>superlibrary</artifactId>
    <version>7.5</version>
</dependency> 
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
</dependencies> 
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>native2ascii-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>native2ascii</goal>
            </goals>
            <configuration>
            <encoding>UTF8</encoding>
                </configuration>
        </execution>
     </executions>
</plugin>

公用记录
公用记录
1.1.1
com.myosproject
超级图书馆
7.5
朱尼特
朱尼特
3.8.1
测试
我想写一些类似的东西

<dependencies>
    commons-logging/commons-logging/1.1.1
    com.myosproject/superlibrary/7.5
    test:junit/junit/3.8.1
</dependencies>
<build version="1.5"/>

通用日志记录/通用日志记录/1.1.1
com.myosproject/superlibrary/7.5
测试:junit/junit/3.8.1
或代替

<build>
    <plugins>
        <plugin>
             <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
                     <source>1.5</source>
                     <target>1.5</target>
                 </configuration>
        </plugin>
    </plugins>

maven编译器插件
1.5
1.5

我想要

<dependencies>
    commons-logging/commons-logging/1.1.1
    com.myosproject/superlibrary/7.5
    test:junit/junit/3.8.1
</dependencies>
<build version="1.5"/>

(最后一个例子,我们完成了),而不是写:

<dependencies>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
<dependency>
    <groupId>com.myosproject</groupId>
    <artifactId>superlibrary</artifactId>
    <version>7.5</version>
</dependency> 
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
</dependencies> 
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>native2ascii-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>native2ascii</goal>
            </goals>
            <configuration>
            <encoding>UTF8</encoding>
                </configuration>
        </execution>
     </executions>
</plugin>

org.codehaus.mojo
native2ascii maven插件
国家科学院
UTF8
我不想什么都不写。也就是说,maven会检测到native2ascii文件夹的存在,并在默认情况下做正确的事情

我知道我将内置功能与插件和其他东西混合在一起,但请试着从一个maven用户的角度来看,他对该工具非常满意,但认为他可以更快乐

因此:

  • 有没有一种方法可以将maven配置为这样工作?(这样做是否明智)

  • 是否有其他我不知道的工具可以做到这一点?


  • Maven配置当然是冗长的,Maven 3的目标是解决这个问题(参见了解一些想法),并且有一个允许在YAML中定义配置的方法。还有一个支持属性的应用程序,在某种程度上减少了配置的大小

    例如:

    groupId: org.twdata.maven
    artifactId: maven-yamlpom-plugin
    version: 1.0-SNAPSHOT
    packaging: maven-plugin
    name: YAML POM Plugin
    dependencies:
      - { groupId: org.apache.maven, artifactId: maven-plugin-api, version: 2.0 }
      - { groupId: SnakeYAML, artifactId: SnakeYAML, version: 1.1 }
      - { groupId: commons-io, artifactId: commons-io, version: 1.4 }
      - { groupId: dom4j, artifactId: dom4j, version: 1.4 }
      - { groupId: junit, artifactId: junit, version: 3.8.1, scope: test }
      - { groupId: xmlunit, artifactId: xmlunit, version: 1.2, scope: test }
    build:
      plugins:
        - artifactId: maven-compiler-plugin
          configuration:
        source: 1.5
        target: 1.5
    repositories:
      - id: snakeyaml
        name: SnakeYAML repository
        url: http://snakeyamlrepo.appspot.com/repository
    

    使用Maven 2,您可以通过在父项目中定义公共配置来减轻冗长,在您引用的示例中,依赖项都可以在父项目中定义,或者在父项目的dependencyManagement部分中定义,以便子项目可以将junit依赖项声明为

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
    
    
    朱尼特
    朱尼特
    
    这是一个小小的进步


    插件既可以在父级中声明,也不需要在子级中定义。

    我完全同意您的看法,pom.xml的某些部分可以压缩,特别是
    部分

    我非常喜欢声明依赖项的方式:

    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="2.0"/>
        ...
    
    
    ...
    

    我见过一个类似Ivy的实验工具,它提出了一个实验工具来创建依赖关系。但是,我从来没有尝试过。

    +1出于你问题的良好精神:)如果Maven的人在开始学习XML之前,已经费心学习XML,特别是“属性”的存在,那就好了。。。。甚至不要让我开始。