Maven - 如何为每个java包构建一个jar

时间:2012-11-30 10:06:02

标签: java maven build

是否可以为项目中的每个java包构建一个jar?

e.g。我的包是com.mypackage.foo, com.mypackage.bar两个包都在一个项目中。 我现在可以启动maven构建来获取foo.jar和bar.jar吗?

感谢4的帮助。

编辑:好的,我认为你需要更多的信息,为什么我这么想。 我有一个项目,它分为两个部分(一个库和一个守护进程),两个部分必须可以相互独立运行,所以我想为每个部分使用一个自己的jar。 我正在考虑一个“父项目”,其中包括两个部分作为模块,就像你们建议的那样(这是一种更好的方式吗?)。 接下来的一点是,我只有一个git repo,我想提交整个项目。是否可以将模块项目内容放在父项目中,如src/lib/java或我必须如何做?

3 个答案:

答案 0 :(得分:2)

为每个包创建一个项目以遵守Maven约定。 一个简单的问题,为什么你需要这样做?

答案 1 :(得分:2)

maven jar plugin可以配置为包含和排除类。因此,从一个包中打包所有类很容易:

     <includes>
        <include>com/example/foo/*</include>
      </includes>
      <excludes>
        <exclude>com/example/foo/subfoo1/**</exclude>
        <exclude>com/example/foo/subfoo2/**</exclude>
        <!-- to exclude all packages that start with com.example.foo -->
      </excludes>

但是你必须为每个单独的软件包编写一个pom文件......你可以创建额外的多模块pom,运行所有这些模块,你甚至可以用一个小的自动生成pom文件java programm,虽然自动检测所有将提前进入罐子的包装是非常具有挑战性的。


使用maven AntRun plugin并定义<target>可能更容易为每个包调用jar task


多模块结构可能是这样的:

./
 pom.xml
 project/
        src/...
        target/...
        pom1.xml
        pom2.xml
        pom3.xml

我的理解是,所有java包都驻留在同一个项目中。如果包在不同的项目中,那么将它们打包在不同的罐子中就不会有任何问题 - 这将是默认行为。

答案 2 :(得分:0)

在Maven中,惯例是为模块构建一个jar,换句话说 从src/main/java的内容构建一个jar。如果你需要从每个包装中构建一个罐子,对我来说听起来有点奇怪。 你可以做这样的事情,但这是不推荐,因为它会在以后导致麻烦。这是你从Maven开始的一场战斗,你最终会放松。

您需要配置maven-jar-plugin

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        ...
        <configuration>
          <excludes>
            <exclude>...</exclude>
          </excludes>
          <includes>
            <include>com/mypackage/foo/**</include>
          </includes>
        </configuration>
        ...
      </plugin>
    </plugins>
  </build>