我的需求非常基本,但我找不到任何干净的答案:我只需要能够在多模块项目中分配资源.
让我们考虑例如LICENSE文件,我在此假设所有模块都是相同的.我不想手动将其复制到每个模块中,因为文件可能会随着时间而改变.我也不想在项目文件夹之外静态链接资源(即使使用相对路径),因为模块化结构也可能发生变化.
是否有任何插件可用于强有力地保证为每个模块提供所需的文件?通过利用父项目的POM或直接由模块化层次结构中的超级项目执行来获得此类副本同样是可以接受的.
我们有一个使用Eclipse和Maven的多模块项目.我可以让它在过去工作的唯一方法是为项目使用平面布局,其中父模块是其他模块的对等.这适用于m2eclipse和Subversion.
现在我们想转移到Git和GitHub.我想将整个项目以及所有模块作为GitHub上的单个项目公开.问题是Eclipse/Git插件EGit想要一次管理一个项目,而不是项目组,所以如果你有一个平面布局,你就不能这样做.
正确的答案是使用标准的Maven分层布局,并将父模块和所有模块作为一个单元进行管理.但是Eclipse不喜欢这样,并且没有多少人会让Eclipse接受嵌套项目.m2Eclipse不支持层次结构:https://issues.sonatype.org/browse/MNGECLIPSE-2291
所以你会怎么做?从命令行执行Git并放弃查看Eclipse中哪些文件已更改的功能?还是放弃了Eclipse?
我似乎无法让Maven在多模块项目中找到兄弟模块.
我已经mvn clean install在所有模块中运行了.
这是设置:
Product
+-- MagniCompCommon
+-- Model
Run Code Online (Sandbox Code Playgroud)
该Model项目具有MagniCompCommon依赖性.当我跑mvn clean compile进来时Model,我得到:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Model 1.0
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for com.magnicomp:MagniCompCommon:jar:1.0 is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.585 s
[INFO] Finished at: 2015-10-14T10:09:04-07:00
[INFO] Final Memory: 5M/15M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project Model: Could not resolve …Run Code Online (Sandbox Code Playgroud) 如何将maven多模块项目正确导入eclipse?当我导入新的maven项目并选择父pom时,我可以看到父pom下的子模块,它们在包资源管理器和项目资源管理器中可见.但是,它们被呈现为深层目录结构,就好像eclipse不知道它们是java项目.
当我展开子模块项目时,我没有看到java包快捷方式,因为我打开了一个maven项目.我只把它看作一个深层目录结构.如何导入multimodule maven项目并打开子模块项目以利用eclipse java项目功能?
首先,我有一个像这样的多模块Maven层次结构:
??? project (parent pom.xml)
? ??? service
? ??? api-library
Run Code Online (Sandbox Code Playgroud)
所以现在问题来了:
我在使用api库中的类的服务模块中编写了JAX-RS端点。
当我开始quarkus时,我得到以下警告:
13:01:18,784 WARN [io.qua.dep.ste.ReflectiveHierarchyStep] Unable to properly register the hierarchy of the following classes for reflection as they are not in the Jandex index:
- com.example.Fruit
- com.example.Car
Consider adding them to the index either by creating a Jandex index for your dependency or via quarkus.index-dependency properties.
Run Code Online (Sandbox Code Playgroud)
这两个类com.example.Fruit和com.example.Car位于在api-library模块。
所以我想我需要将它们添加到application.properties中的Jandex索引依赖项中。
但是如何将Jandex索引依赖项添加到quarkus中呢?
我有一个多模块项目,想要创建一个包含所有模块类的jar.在我的父POM中,我声明了以下插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>bin</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是,在运行mvn assembly:assembly时,只包含父文件夹中的源(空).如何将模块中的源包含到存档中?
我为这篇文章的篇幅感到抱歉,但是如果不提供图片,我就很难让它更简洁.我最近继承了maven 3.0多模块项目的build-master的工作.问题是项目/模块的结构是一场灾难.从事物当前存储在源代码管理(我们使用RTC)到模块的pom结构的方式,我正在试图让每次完成一个完整的构建周期.
随着项目层次结构的进行,所有模块都存储为"平面"; 即:一切都处于同一水平.我有一个父pom,所有模块都依赖于父.但是,父级与我的所有其他模块处于同一级别.
例如:
c:\dev\MyEarProject
+ parent-pom
- pom.xml
+ module1
- pom.xml (depends on parent-pom)
- src
- main
- ...
+ module2
- pom.xml (depends on parent-pom)
- src
- main
- ...
+ module3
- pom.xml (depends on parent-pom)
- src
- main
- ...
Run Code Online (Sandbox Code Playgroud)
父pom定义了构建项目所需的所有模块,以及在不同子模块中使用的工件版本号的一堆属性:
<modules>
<module>../module1</module>
<module>../module2</module>
<module>../module3</module>
</modules>
<properties>
<org.springframework.version>3.0.5.RELEASE</org.springframework.version>
<slf4j.version>1.6.4</slf4j.version>
<repositoryAddress>${snapshots.repo.url}</repositoryAddress>
<my.hibernate-module.dao.impl>1.2.3</my.hibernate-module.dao.impl>
<my.hibernate-module.dao.api>1.2.3</my.hibernate-module.dao.api>
</properties>
Run Code Online (Sandbox Code Playgroud)
反过来,每个模块的pom通过pom的工件编号依赖于父pom:
<parent>
<groupId>com.cws.cs.lendingsimulationservice</groupId>
<artifactId>parent-pom</artifactId>
<version>1.0.6</version>
</parent>
Run Code Online (Sandbox Code Playgroud)
为了使事情更加混乱,实际的工件名称可能会或可能不会(取决于模块)与模块路径匹配.例如,module1可以位于路径中c:\dev\MyEarProject\module1但具有工件名称hibernate-module.但是,由于它存储在RTC中的方式,目录module1在签出时被调用.
当然,构建一切的最简单方法是进入c:\dev\MyEarProject\parent-pom\并运行mvn clean …
我对Maven的多模块项目有一个普遍的疑问.何时以及为何选择它?
我实现了两个基于maven的独立Web项目,使用Spring MVC,hibernate和Jax-RS实现.但是我的要求发生了变化,现在我需要将项目作为子项目合并到另一个项目中,这是我们的父项目.所以我使用maven multimodule配置.
<packaging>pom</packaging>
<modules>
<module>../child1</module>
<module>../child2</module>
</modules>
Run Code Online (Sandbox Code Playgroud)
<packaging>jar</packaging>
<parent>
<groupId>com.xyz.alpha</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
Run Code Online (Sandbox Code Playgroud)
<packaging>jar</packaging>
<dependency>
<groupId>com.xyz.alpha</groupId>
<artifactId>child1</artifactId>
<version>2.0.2</version>
</dependency>
<parent>
<groupId>com.xyz.alpha</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
Run Code Online (Sandbox Code Playgroud)
但我需要在java中配置项目,以便它将扫描父项的组件以及子项目和执行项目.目前我对每个项目都有单独的配置:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { AppConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
Run Code Online (Sandbox Code Playgroud)
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.x.y")
public class AppConfig …Run Code Online (Sandbox Code Playgroud) 我们是一家大型公司,拥有大约2000个独立的Java项目.由于历史原因,我们没有多模块项目,但我们想介绍它们.
从逻辑上讲,我们已经拥有了"团体"项目,即负责(例如)50个密切相关项目的人.这个人定期发布一份BOM,其中包含这50个项目的近期连贯版本.
现在抓住这50个项目并将它们放入一个大的多模块项目中会很有意义.但是,有必要发布BOM,因为其他项目(我们组之外)应该具有一致的版本.
总而言之,我们需要一个BOM,其中包含属于多模块项目的所有50个项目的版本.我想知道创建这样一个BOM的"Maven方式"是什么.我能想到的是:
什么是可取的?