是否可以为项目中的每个java包构建一个jar?
e.g。我的包是com.mypackage.foo, com.mypackage.bar
两个包都在一个项目中。
我现在可以启动maven构建来获取foo.jar和bar.jar吗?
感谢4的帮助。
编辑:好的,我认为你需要更多的信息,为什么我这么想。
我有一个项目,它分为两个部分(一个库和一个守护进程),两个部分必须可以相互独立运行,所以我想为每个部分使用一个自己的jar。
我正在考虑一个“父项目”,其中包括两个部分作为模块,就像你们建议的那样(这是一种更好的方式吗?)。
接下来的一点是,我只有一个git repo,我想提交整个项目。是否可以将模块项目内容放在父项目中,如src/lib/java
或我必须如何做?
答案 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>