2009-07-09 65 views
2

该项目是一个包含核心库代码,测试和示例代码的库。在构建过程结束后,应建立以下档案:使用maven的示例代码存档

  • xy-1.1.0-core.jar
  • xy-1.1.0-tests.jar
  • xy-1.1.0-examples.jar

什么是与Maven此设置的最佳方法是什么? 目前的设置是:

src 
src/main/java 
src/examples/java 
src/test/java 

此外,还应该包含所有依赖关系的lib目录。 xy-jar,库罐和其他脚本应该打包到发布文件xy-1.1.0.tar.gz中。

+0

我不同意这个问题不具有建设性 - 我发现这些答案对您在Maven的约定中提供给您的选项有帮助。认为这可能是过度积极适度的情况。 – cwash 2012-10-22 14:31:19

回答

5

Maven的一个重大优势(或缺点,取决于你与谁交谈)是“约定优于配置” - 这意味着当你有选择尝试将你的应用程序撬入Maven或试图撬开Maven到您的应用程序 - 将应用程序撬入Maven通常会更容易。

它可能会更容易打破你的单一的“工程”分为两个Maven项目 - 核心和实例。 Maven将“项目”视为创建单个工件的东西 - 也就是JAR文件,WAR文件,EAR文件等等(这里有一些例外情况 - 比如测试jar,但我们稍后会讨论)。将“示例”作为模块,子项目或独立项目依赖于“核心”项目可能会更容易。

,那么“测试”部分包含唯一的“核心”,或“核心”和“实例”测试?如果它只是核心,那么你需要把它移到核心项目的测试目录中。如果两者都是,那么您将需要将其拆分并将单元测试移至相应的项目中。

您可以通过配置Maven的JAR-插件作为guide to attached tests详细生成的项目的测试代码JAR。

Maven将通过Maven构建的所有程序的所有依赖关系保存在“本地存储库”中 - 通常存储在%user_directory%/。m2下的许多目录中 - 您可以让Maven将项目的所有依赖项复制到指定的目录通过使用dependency:copy-dependencies详细描述在dependency plugin page上。

要建立你打算使用以前的项目,以建立一个Assembly最后的焦油。

2

内特涵盖这在大多数情况下,但我给具体的例子。

这是你的目录布局应该什么样子:

pom.xml 
src/main/assembly/assembly.xml 
core/pom.xml 
core/src/main/java/... 
core/src/test/java/... 
examples/pom.xml 
examples/src/main/java/... 

在基本POM,你会表示你的子模块如下:

<modules> 
    <modules>core</modules> 
    <modules>examples</modules> 
</modules> 

假设你的基地的groupId是“com.company 。例如,”和你的artifactId是‘XY’,那么你的模块劲歌将以以下(调整名称和版本,当然)开始:

<parent> 
    <groupId>com.company.example</groupId> 
    <artifactId>xy</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
</parent> 
<groupId>com.company.example</groupId> 
<artifactId>xy-core</artifactId> 
<version>1.0.0-SNAPSHOT</version> 

要确保装配在基础项目运行,包括:按照您的生成配置:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <descriptors> 
     <descriptor>src/main/assembly/assembly.xml</descriptor> 
    </descriptors> 
    </configuration> 
</plugin> 

此外,搭建测试类独立的罐子,这增加了核心/ pom.xml文件:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
    <execution> 
     <goals> 
     <goal>jar</goal> 
     <goal>test-jar</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

的assembly.xml本身的Wi LL看起来像这样:

<assembly> 
    <id>assembly</id> 
    <formats> 
    <format>tar.gz</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <moduleSets> 
    <moduleSet> 
     <binaries> 
     <dependencySets> 
      <dependencySet> 
      <outputDirectory>lib</outputDirectory> 
      </dependencySet> 
     </dependencySets> 
     <outputDirectory>lib</outputDirectory> 
     </binaries> 
    </moduleSet> 
    </moduleSets> 
</assembly> 

我可能在这里失去了一些东西,但是这是一般的想法。