当我运行 Maven 测试时,我将所有依赖项作为 jar 获取。我可以在编辑代码时使用这些 jar 中的类的方法。但我想知道:
我问这个是因为,在读取jar的内容时,它只包含src/main/java下代码的编译类。 我觉得有一点我理解错了。
就像你说的,要运行一个 jar,你需要每个依赖项。但要将其放入存储库,您不需要它。
所以基本上,当你想创建可运行的 jar 时,你需要一些 Maven 构建插件,它将把每个依赖项打包到你的 .jar 文件中,比如 maven-shade-plugin。
如果你想打包一个jar并将其上传到远程存储库供其他人使用,你不需要它,因为现在它就在某人一边,他将使用你的依赖项来下载你创建的每个依赖jar(maven自动执行)。
示例
这完全取决于您需要做什么。
假设您有一个控制台应用程序,可以显示芝加哥的天气,该应用程序使用依赖项来获取天气,我们将其称为“weather-dep”,因此您的应用程序需要内部有“weather-dep”的依赖项。
现在,如果您希望您的用户只运行它(jar 可以从控制台“java -jar yourWeatherApp.jar”运行),您需要以 yourWeatherApp.jar 将在 Weather-dep.jar 中包含的方式打包它,maven将在打包过程中下载。
第二个选项是当您知道有人想要使用 yourWeatherApp.jar 显示芝加哥的天气时,该人将他的应用程序命名为 usaWeatherApp.jar,他会将您的依赖项包含在他的应用程序中,然后他将能够使用 yourWeatherApp 中的类.jar 也来自weather-dep.jar,因为它是您应用程序内部的依赖项。
您只需要知道哪种用例最适合您。
简短的回答是,当有人不想只运行您的应用程序而不在其应用程序中包含它的函数/类等时,您可以打包包含依赖项的 jar。