Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用相同的资源位置执行和构建maven2 java jar项目_Java_Maven 2_Jar - Fatal编程技术网

使用相同的资源位置执行和构建maven2 java jar项目

使用相同的资源位置执行和构建maven2 java jar项目,java,maven-2,jar,Java,Maven 2,Jar,我对maven2和JavaJAR项目有点小问题 这是我的项目文件系统: MyApp -- /src/main/java -- my.package -- Main.java -- /src/main/resources -- application.properties 使用标准maven插件将Pom.xml配置为具有自定义包阶段: <!-- copy resources from /src/main/resource to target -->

我对maven2和JavaJAR项目有点小问题

这是我的项目文件系统:

MyApp
  -- /src/main/java
    -- my.package
      -- Main.java
  -- /src/main/resources 
    -- application.properties
使用标准maven插件将Pom.xml配置为具有自定义包阶段:

<!-- copy resources from /src/main/resource to target -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.4</version>
  <configuration>
    <outputDirectory>${project.build.directory}</outputDirectory>
    <overwrite>true</overwrite>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>resources</goal>
      </goals>
    </execution>
  </executions>
</plugin>

<!-- create an executable jar -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.4</version>
  <configuration>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <classpathPrefix>lib/</classpathPrefix>
        <mainClass>my.package.Main</mainClass>
      </manifest>
    </archive>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>jar</goal>
      </goals>
    </execution>
  </executions>
</plugin>

<!-- copy dependencies jars to target/lib folder -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.5.1</version>
  <configuration>
    <outputDirectory>${project.build.directory}/lib</outputDirectory>
    <overWriteReleases>false</overWriteReleases>
    <overWriteSnapshots>false</overWriteSnapshots>
    <overWriteIfNewer>true</overWriteIfNewer>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
    </execution>
  </executions>
</plugin>
使用此配置并调用mvn包,一切都正常:在目标文件夹内创建一个新的jar,并复制资源和依赖项。 文件application.properties通过引用 新Fileapplication.properties 它是由JRE发现的。 如果我从目标文件夹手动运行jar,它会工作

现在我的问题是:我想添加execmaven插件来直接在eclipse中执行我的项目。 下面是我在pom.xml中的新插件:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <configuration>
    <executable>java</executable>
    <mainClass>my.package.Main</mainClass>
  </configuration>
</plugin>
通过这种方式,我的类被执行,所有依赖项都得到满足,但找不到特定application.properties中的资源,因为我的程序工作目录是MyApp而不是MyApp/target。使用配置是无用的

我如何解决这个问题??
提前谢谢

我想到两件事

a不通过maven exec运行,而是通过Eclipse IE作为独立应用程序运行。运行主类。您的Eclipse项目应该被Mavenize,以便设置正确的类路径


b不要使用常规的文件系统访问,而是将要加载的文件放在类路径上,并使用getClass.getClassLoader.getResourceAsStream来加载它。

使用这种奇怪的maven构建有什么用意?