gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:01:01 24 4
gpt4 key购买 nike

我的 maven2 和 java jar 项目有一个小问题。

这是我的项目文件系统:

MyApp
-- /src/main/java
-- my.package
-- Main.java
-- /src/main/resources
-- application.properties

Pom.xml 配置为使用标准 Maven 插件进行自定义包阶段:

<!-- 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 package 一切正常:在目标文件夹内创建一个新的 jar,并复制资源和依赖项。文件 application.properties 是通过引用的 新文件(“应用程序.属性”)它是由 JRE 找到的。如果我从目标文件夹手动运行 jar 它可以工作!

现在我的问题:我想添加 exec-maven-plugin 来直接在 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 作为独立应用程序运行(即运行主类)。您的 Eclipse 项目应该被 mavenized,以便设置正确的类路径。

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

关于java - 使用相同的资源位置执行和构建 maven2 java jar 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com