如何从 JUnit 测试读取 Maven 属性?

发布于 2024-12-12 04:31:03 字数 751 浏览 0 评论 0 原文

我正在使用 Maven 3.0.3 和 JUnit 4.8.1。在我的 JUnit 测试中,如何读取 Maven pom.xml 文件中定义的 project.artifactId?在我的 pom 中,我有

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.myco.pplus2</groupId>
<artifactId>pplus2</artifactId>

但这在我的 JUnit 测试中无法获取工件 id ...

@Before
public void setUp() { 
    ...        
    System.out.println( "artifactId:" + System.getProperty("project.build.sourceEncoding") ); 
}   // setUp

上面的输出“artifactId:null”。无论如何,感谢任何帮助,-戴夫

I'm using Maven 3.0.3 with JUnit 4.8.1. In my JUnit test, how do I read the project.artifactId defined in my Maven pom.xml file? In my pom, I have

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.myco.pplus2</groupId>
<artifactId>pplus2</artifactId>

But this isn't working within my JUnit test to gete the artifact id ...

@Before
public void setUp() { 
    ...        
    System.out.println( "artifactId:" + System.getProperty("project.build.sourceEncoding") ); 
}   // setUp

The above outputs "artifactId:null". Anyway, appreciate any help, - Dave

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

热风软妹 2024-12-19 04:31:04

查看 systemPropertyVariables (和朋友)万无一失。它做你想做的事。
AFAIK 没有办法只传递所有 Maven 属性而不列出它们。

Look at the systemPropertyVariables (and friends) for surefire. It does what you want.
AFAIK there is no way to just pass all the maven properties without listing them.

一杆小烟枪 2024-12-19 04:31:04

有时,Eclipse被配置为使用Java Builder进行项目->自动构建(右键单击->项目->属性->构建器)

如果是这种情况,有时资源过滤不起作用。您有多种选择:

  1. 如上所述在 pom.xml 文件中提供属性。
  2. 提供属性文件并执行 Maven 资源过滤
  3. 使用 Maven Invoker

2 和 3 的描述见 http://scottizu.wordpress.com/2013/10/16/reading-the-project-version-from-the-maven-pom-file/

Sometimes, Eclipse is configured to use the Java Builder for Project->Automatically Build (Right Click->Project->Properties->Builders)

If such is the case, sometimes the resource filtering doesn't work. You have several options:

  1. Provide the property in the pom.xml file as above.
  2. Provide a properties file and perform Maven resource filtering
  3. Use the Maven Invoker

2 and 3 are described in http://scottizu.wordpress.com/2013/10/16/reading-the-project-version-from-the-maven-pom-file/

傲影 2024-12-19 04:31:03

Maven 项目属性不会自动添加到 Java 系统属性。为了实现这一目标,有很多选择。对于这一特定需求,您可以为 maven-surefire-plugin (运行测试的插件)定义一个系统属性,然后使用 System.getProperty 方法。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <systemProperties>
            <property>
                <name>projectArtifactId</name>
                <value>${project.artifactId}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>

实现将 Maven 属性获取到 JUnit 测试的其他方法可能是测试源文件的资源过滤。

附言。恕我直言,即使在测试中,在运行时读取 Maven 配置也是相当肮脏的。 :)

Maven project properties aren't automatically added to Java System properties. To achieve that there are quite a few options. For this specific need you could define a System property for maven-surefire-plugin (the one running tests) and then use the System.getProperty method.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <systemProperties>
            <property>
                <name>projectArtifactId</name>
                <value>${project.artifactId}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>

Other way to achieve getting Maven properties to JUnit tests would probably be resources filtering for test source files.

PS. Reading Maven configurations at runtime, even in tests is pretty dirty IMHO. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文