0

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

例如,我的包是com.mypackage.foo, com.mypackage.bar两个包都在一个项目中。我现在可以开始一个 Maven 构建来获得一个 foo.jar 和一个 bar.jar 吗?

感谢 4 的帮助。

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

4

3 回答 3

2

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

于 2012-11-30T10:15:59.763 回答
2

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

     <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 上创建,它运行所有这些模块,你甚至可以用一个小的 java 程序自动生成 pom 文件,尽管提前自动检测将进入 jar 的所有包非常具有挑战性。


使用maven AntRun 插件并定义一个<target>调用每个包的jar 任务可能会更容易。


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

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

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

于 2012-11-30T10:20:38.643 回答
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>
于 2012-11-30T10:13:19.717 回答