【问题标题】:Pass file into jar将文件传递到 jar
【发布时间】:2020-09-18 18:14:16
【问题描述】:

我有包含此代码的 jar 文件

import java.io.File
import java.nio.file.Paths

import org.cassandraunit.utils.EmbeddedCassandraServerHelper

object CassandraMockBootable extends App {
  println("Running embedded Cassandra.........")
  val file = Paths.get("/target/classes/cassandra.yaml").toFile
  assert(file.exists())
  EmbeddedCassandraServerHelper.startEmbeddedCassandra(file, 50000)
}

这个 jar 由运行 java 进程的 maven 插件在另一个应用程序中使用

 <plugin>
        <groupId>com.bazaarvoice.maven.plugins</groupId>
        <artifactId>process-exec-maven-plugin</artifactId>
        <version>0.8</version>
        <executions>
          <execution>
            <id>Embedded-Cassandra</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>start</goal>
            </goals>
            <configuration>
              <name>Embedded-Cassandra</name>
              <skip>${skipStartService}</skip>
              <arguments>
                <argument>java</argument>
                <argument>-XX:+HeapDumpOnOutOfMemoryError</argument>
                <argument>-Xss1M</argument>
                <argument>-XX:+UseParallelGC</argument>
                <argument>-cp</argument>
                <argument>../../mock-service/target/lib/*</argument>
                <argument>mocks.bootables.CassandraMockBootable</argument>
              </arguments>
            </configuration>
          </execution>
    </executions>
</plugin>

我不知道怎么做,但我无法将 cassandra.yaml 传递给该进程,并且断言永远不会起作用。

我试图将该文件放入 src 的资源中并在生成的 jar 项目和消费者项目中进行测试,但没有。断言总是失败。

知道我在这里做错了什么吗?

问候

【问题讨论】:

    标签: java scala maven cassandra


    【解决方案1】:

    创建一个资源文件夹并将 yaml 文件放在其中,不要放在目标文件夹路径中,因为目标文件夹总是在构建发生时刷新,这使得文件不可用。

    所以请创建单独的资源文件夹并保留yaml文件,然后尝试访问

    【讨论】:

    • 在每次构建 maven 模块时,资源文件都会复制到目标文件夹中。对不起,但我不明白,你的意思是在哪个资源文件夹中? jar 项目之一还是正在使用 jar 的项目?
    • 在jar项目中。资源通常在src/main/resources
    【解决方案2】:

    您似乎正在使用相对路径。删除第一个斜线:

    val file = Paths.get("target/classes/cassandra.yaml").toFile
    

    或者,添加一个点:

    val file = Paths.get("./target/classes/cassandra.yaml").toFile
    

    或者提供完整路径

    val file = Paths.get("/full/path/target/classes/cassandra.yaml").toFile
    

    【讨论】:

    • 感谢您的回答。仍然不清楚的是,我必须把文件放在哪里。在 jar 的资源中或在使用该 jar 的项目的资源中。如果您看到我的问题,是在另一个插件内的 Maven 插件中运行 jar。
    猜你喜欢
    • 2011-06-17
    • 2012-05-17
    • 2013-07-11
    • 1970-01-01
    • 2016-01-06
    • 2015-06-30
    • 1970-01-01
    • 2018-02-25
    相关资源
    最近更新 更多