我在我的开发环境中使用 Eclipse m2e,并且我有一个 spring-boot maven 项目(在这种情况下可以被视为具有可运行主类的标准 maven jar 项目),它依赖于同一工作区中的另一个 maven 项目(工作区神器,我们称之为moduleB,spring-boot项目的兄弟),当我运行maven目标时clean package
(appassembler:assemble
目标可以省略,因为我配置了插件的执行部分,见下面的配置细节),生成的程序集在目标目录看起来不错,只是 repo 中缺少 moduleB 的 jar。根据日志,该插件似乎正在尝试复制moduleB中的类文件夹下的每个文件:
...
[INFO] Installing artifact ...
[INFO] Installing artifact /foo/bar/moduleB/target/classes to /foo/bar/repo/groupid/artifactid/0.0.1-SNAPSHOT/moduleB-0.0.1-SNAPSHOT.jar
[INFO] Installing ...
...
如何解决这个问题?在运行 assemble 之前,我是否必须将 moduleB 安装到 maven 本地存储库中?有什么办法可以绕过这一步,因为我不想用不稳定的工件弄乱存储库。
插件的PS配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.10</version>
<configuration>
<configurationDirectory>conf</configurationDirectory>
<configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
<copyConfigurationDirectory>true</copyConfigurationDirectory>
<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
<assembleDirectory>${project.build.directory}/someApp</assembleDirectory>
<extraJvmArguments>-Xms128m</extraJvmArguments>
<logsDirectory>logs</logsDirectory>
<repositoryLayout>default</repositoryLayout>
<repositoryName>repo</repositoryName>
<showConsoleWindow>true</showConsoleWindow>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<binFileExtensions>
<unix>.sh</unix>
</binFileExtensions>
<programs>
<program>
<mainClass>someClass</mainClass>
<id>app</id>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
</program>
</programs>
</configuration>
<executions>
<execution>
<id>assemble</id>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
</plugin>
更新#1:
我绕过了这个spring-boot:repackage
目标,因为它将所有东西都封装在一个 jar 中,包括我希望在生产环境中方便地编辑的配置文件。这是我之前提出的问题:Alternatives to Distribution spring-boot application using maven (other than spring-boot:repackage)