我有一个多模块maven应用程序,它具有以下结构:
main-project
->submodule1
->src->main
->java
->MainClass.java
->resource
->php
index11.php
file12.php
file13.php
->submodule2
->src->main
->java
MainClass.java
->resource
->php
index21.php
file22.php
file23.php
->submodule3
->src->main
->java
MainClass.java
->resource
->php
index31.php
file32.php
file33.php
->web-app
->src->main
->webapp
来自子模块的Java类应该访问它们资源目录中的php文件,并使用Quercus Resin执行它。然而,当项目打包在war中时,子模块被打包到存储在web-app/web-inf/lib中的jar文件中,这使得无法执行php文件。为了解决这个问题,我找到了将所有php文件从子模块复制到web-app中的解决方案,这样当它在Tomcat中提取时,它就不在jar文件中,可以执行。为此,我使用了maven-remote-resources-plugin,所有php文件都存储在web-app/src/main/webapp/php中。
我现在面临的问题是如何从子模块中的java类正确地提供这些php文件的路径。当应用程序部署到Tomcat时,这些java类位于jar文件中,但在开发过程中,我使用的是嵌入式Jetty服务器,所以我需要在这两种情况下都能工作的解决方案。
如果我使用类加载器来获取资源,例如。getClass().getClassLoader().getResource(“/php/index11.php”).getPath()返回submodule1.jar文件的绝对路径。
你知道怎么解决这个问题吗?
我设法解决了这个问题,所以我将在这里张贴解决方案,如果它可能对其他人有所帮助。
在每个子模块中,我都有一个maven-remote-resources-plugin包来收集我需要的所有资源
<build>
<plugins>
<plugin>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*.php</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
然后,在web-app子模块中,我使用maven-remote-resources-plugin过程将这些php文件复制到名为WEB-INF/php/submodule-name的资源目录中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.5</version>
<configuration>
<resourceBundles>
<resourceBundle>org.au.morph.offline:morph-sample:${project.version}</resourceBundle>
<resourceBundle>org.au.morph.offline:morph-project:${project.version}</resourceBundle>
</resourceBundles>
<outputDirectory>src/main/webapp/WEB-INF</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
</execution>
</executions>
</plugin>
public static String getWebContentPath(String contextPath) throws UnsupportedEncodingException {
String path = PathUtils.class.getClassLoader().getResource("").getPath();
String fullPath = URLDecoder.decode(path, "UTF-8");
if(fullPath.contains("/WEB-INF/classes")){
String pathArr[] = fullPath.split("/classes/");
fullPath=pathArr[0];
}
String reponsePath = "";
reponsePath = new File(fullPath).getPath() + File.separatorChar + "php"+File.separatorChar+contextPath;
return reponsePath;
}
我有一个Maven Java应用程序,我正在尝试进行对接。到目前为止,我有以下dockerfile,是我从这个答案中复制的。 如果我的应用程序是一个单模块项目,这将是很好的,但是因为它是多模块的,所以我假设我不能仅仅使用。 但是,这会在阶段出错: 注意,来自我的本地m2文件夹。
我使用的是Maven 3.0.3、JUnit 4.8.1和Java1.6。我在JUnit测试文件中有这个... 未拾取“test.properties”(输入流对象为空)。我的项目结构如下: parent+---pom.xml +----war模块 +------pom.xml +------src/test/java/junit文件 +------src/test/resources/test.
我有一个maven多模块项目。其中一个模块(编译为.jar)只包含域对象,这些对象将在客户端和服务器端使用(我将这个.jar添加为我的其他模块的依赖项)。 我知道GWT模块,其中将使用来自共享<代码>的对象。jar还必须有源文件才能成功编译。所以我尝试添加到我的pom中。xml两者: 和 但结果是<代码>。jar不包含GWT模块源代码(即GWT.xml)。也会添加域类的所有源(位于
问题内容: 有什么方法可以在Maven中的父项目的模块之间共享资源?例如,我想为一个多模块Maven项目中的所有模块指定一个log4j.properties文件。 通常,我使用Eclipse IDE通过选择常规项目来创建父项目,然后通过指定的包装将其转换为Maven项目。这将创建一个没有and等文件夹的“干净”项目结构。我不知道在这种情况下应该在哪里放置这样的共享资源。 EDIT1 :我想将公共资
我有一个spring boot mavel多模块项目。 如果Spring启动模块依赖于模块,并且在模块的文件夹中有一个属性文件或其他一些资源,我希望捆绑在最终的Spring启动应用程序中,我如何实现这一点。 目前,如果我在模块A JAR上运行,它包括文件: 然而: 提前感谢您的任何建议。
我有一个包含多个应用程序(不同但密切相关的微服务)的解决方案,这些应用程序共享通用且相当复杂的代码。该项目使用Maven,当前设置为: 我的问题是我想使用开发模式来获取更改,但我无法使其工作。对于单个Quarkus应用程序,它受到支持,并且可以从根文件夹使用quarkus:dev进行构建。对于两个Quarkus应用程序,不清楚启动的是哪一个。 我可以使用Maven的选项来选择我想要启动的那个,但是