相关疑难解决方法(0)

Maven2属性,指示父目录

我有一个多模块项目,像这样:

main-project/
    module1/
    module2/
        sub-module1/
        sub-module2/
        sub-module3/
        ...
    module3/
    module4/
    ...
Run Code Online (Sandbox Code Playgroud)

我需要在Maven2中定义一组属性(取决于我想要释放项目的环境).我不会使用<properties>因为有很多属性...因此,我使用Properties Maven2插件.

属性文件位于main-project/目录中.如何在主pom.xml中设置正确的目录,以便为任何子项指定在哪里找到属性文件?

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-1</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>read-project-properties</goal>
            </goals>
            <configuration>
                <files>
                    <file>???/env_${env}.properties</file>
                </files>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

如果我只设置<file>env_${env}.properties</file>,那么当Maven2编译第一个模块时,它将找不到该main-project/env_dev.properties文件.如果我设置<file>../env_${env}.properties</file>,那么将在父级别或任何子模块级别引发错误...

maven-2 properties

98
推荐指数
8
解决办法
14万
查看次数

查找多模块maven reactor项目的根目录

我想使用maven-dependency-plugin将我的多模块项目的所有子模块中的EAR文件复制到相对于整个项目的根目录的目录.

也就是说,我的布局看起来与此类似,名称已更改:

to-deploy/
my-project/
    ear-module-a/
    ear-module-b/
    more-modules-1/
        ear-module-c/
        ear-module-d/
    more-modules-2/
        ear-module-e/
        ear-module-f/
    ...
Run Code Online (Sandbox Code Playgroud)

我希望所有的EAR文件都从它们各自模块的目标目录中复制到my-project/../to-deploy最后

to-deploy/
    ear-module-a.ear
    ear-module-b.ear
    ear-module-c.ear
    ear-module-d.ear
    ear-module-e.ear
    ear-module-f.ear
my-project/
    ...
Run Code Online (Sandbox Code Playgroud)

我可以在每个耳模块中使用相对路径来完成它,如下所示:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>install</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>${project.groupId}</groupId>
                                <artifactId>${project.artifactId}</artifactId>
                                <version>${project.version}</version>
                                <type>ear</type>
                                <outputDirectory>../../to-deploy</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

但我宁愿不在<outputDirectory>元素中指定相对路径.我更喜欢类似的东西${reactor.root.directory}/../to-deploy,但我找不到这样的东西.

此外,我更喜欢有一些方法来继承这个maven-dependency-plugin配置,所以我不必为每个EAR模块指定它.

我还尝试从根pom继承自定义属性:

<properties>
    <myproject.root>${basedir}</myproject.root>
</properties>
Run Code Online (Sandbox Code Playgroud)

但是当我试图${myproject.root}在耳模块POM中使用时,${basedir}它将解析为耳模块的基础.

另外,我找到了http://labs.consol.de/lang/de/blog/maven/project-root-path-in-a-maven-multi-module-project/,其中建议每个开发人员,大概是连续的集成服务器应该在profiles.xml文件中配置根目录,但我不认为它是一个解决方案.

那么有一种简单的方法可以找到多模块项目的根目录吗?

directory maven-2 module root

64
推荐指数
7
解决办法
7万
查看次数

在多模块设置中使用maven $ {basedir}

我正在使用Maven中描述的本地存储库:通过相对路径向jar添加依赖项.

repository-url在最顶层定义pom.xml

<url>file:${basedir}/../3rdParty/maven-repository</url>
Run Code Online (Sandbox Code Playgroud)

此外,最顶层pom.xml定义了2个模块

<modules>
    <module>sub1</module>
    <module>sub2</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

问题是,如果一个模块(比如说sub1)定义了一个应该从存储库下载的依赖项,并且maven是从最顶层的目录调用的,那么${basedir}它不会设置到这个目录,而是设置为sub1,导致错误的存储库URL.

所以,说最顶层的项目就pom.xml

/Development/myproject/pom.xml
Run Code Online (Sandbox Code Playgroud)

存储库在

/Development/3rdParty/maven-repository
Run Code Online (Sandbox Code Playgroud)

然后应将存储库URL设置为

/Development/myproject/../3rdParty/maven-repository
Run Code Online (Sandbox Code Playgroud)

但事实证明它被设定为

/Development/myproject/sub1/../3rdParty/maven-repository
Run Code Online (Sandbox Code Playgroud)

这当然不存在.

知道为什么会这样吗?

maven-2 maven

38
推荐指数
2
解决办法
8万
查看次数

我可以通过pom.xml配置m2eclipse吗?

使用maven-eclipse-plugin,mvn eclipse:eclipse您可以指定eclipse 项目性质构建器,它们将自动添加到eclipse项目中.

早期版本的m2eclipse使用了maven-eclipse-plugin的配置块,并且还允许您使用相同的机制激活自然和构建器.这似乎不再是这种情况因为a)我maven-eclipse-plugin在m2eclipse来源中找不到任何引用而b)它只是不起作用:-)

所以这是我的问题:有没有办法从pom.xml配置m2eclipse生成的eclipse项目?具体来说:项目建设者和性质,但我也对其他选项感兴趣.

eclipse maven-2 m2eclipse maven-eclipse-plugin

14
推荐指数
2
解决办法
6923
查看次数