Java 减轻Maven pom.xml文件的冗长(或:粉丝对Maven的批评)
我喜欢maven。我甚至非常喜欢它。 自从我从Ant切换到它之后,我节省了大量的工作时间,包括构建构建文件、管理依赖项等,并在我的源代码管理存储库中节省了大量的空间 问题是maven文件太冗长。并不是说Ant文件的详细程度更低,而是它们的详细程度适合它们的工作 例如,而不是写: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&
<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 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,特别是“属性”的存在,那就好了。。。。甚至不要让我开始。