使用maven的示例代码存档

时间:2009-07-09 16:20:37

标签: java maven-2 build

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

  • 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-jars,库jar和其他脚本打包到发布文件xy-1.1.0.tar.gz中。

2 个答案:

答案 0 :(得分:5)

Maven的一大优势(或缺点,取决于你与谁交谈)是“约会优于配置” - 这意味着你可以选择试图将你的应用程序撬到Maven,或者试图将Maven撬到你的应用程序 - 将你的应用程序撬到Maven通常要容易得多。

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

“测试”部分是否仅包含“核心”或“核心”和“示例”的测试?如果它只是核心,那么你会想把它移到核心项目的测试目录中。如果是两者,您将需要将其拆分并将单元测试移动到适当的项目中。

您可以通过配置maven-jar-plugin来生成项目测试代码的JAR,详见guide to attached tests

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

要构建最终的tar,您将使用之前的项目构建Assembly

答案 1 :(得分:2)

Nate在很大程度上涵盖了这一点,但我会给出具体的例子。

以下是目录布局的样子:

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>

假设你的base groupId是“com.company.example”而你的artifactId是“xy”,那么你的模块poms将从以下开始(当然要调整名称和版本):

<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>

另外,要为测试类构建一个单独的jar,请将其添加到core / 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本身将如下所示:

<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>

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