在我的项目的POM中,我使用maven-resources-plugin从文件中设置一些属性.但是,Intellij在POM中标记这些属性引用的错误"无法解析符号",可能是因为它无法在任何地方看到它们被定义.有没有办法抑制这个错误?
我有一个名为的属性文件environment.properties.在这个文件中我有一个条目:
applicationUrl = $ {applicationUrlFromPom}
我想在pom文件中使用maven资源插件设置,以便可以在构建时设置此值,并且我可以在Java中使用属性文件中的此值.
thnx提前
任何人都可以帮我解决这个问题吗?
构建期间发生错误.在项目"SAD_spring_maven_restful"上运行构建器"Maven Project Builder"的错误.无法计算构建计划:插件org.apache.maven.plugins:maven-resources-plugin:2.6或其中一个依赖项无法解析:无法读取org.apache.maven.plugins的工件描述符:maven-resources-插件:jar:2.6插件org.apache.maven.plugins:maven-resources-plugin:2.6或其中一个依赖项无法解析:无法读取org.apache.maven.plugins的工件描述符:maven-resources-plugin中:jar:2.6
我是maven的新手并试图配置它用android-maven-plugin构建我的android项目.我在assets目录中有一个application.properties文件,其中包含不同的应用程序设置.我想从我的pom中获取这些价值.在属性文件中,我将一个属性定义为
myFilteredProperty=${helloFromPOM}
Run Code Online (Sandbox Code Playgroud)
并在POM中定义相同的属性:
<properties>
<helloFromPOM>MY PROPERTY</helloFromPOM>
</properties>
Run Code Online (Sandbox Code Playgroud)
切换资产dir上的过滤
<build>
...
<resources>
<resource>
<directory>${project.basedir}/assets</directory>
<filtering>true</filtering>
</resource>
</resources>
...
</build>
Run Code Online (Sandbox Code Playgroud)
并为android-maven-plugin的示例配置recources 插件
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是当我试图在我的应用程序中使用此属性显示Toast时,我看到$ {helloFromPOM}而不是MY PROPERTY.
在我的maven生成的目标目录中,我在两个地方看到这个属性文件:
首先是错误的,它包含$ {helloFromPOM}而不是MY PROPERTY.其次,apk文件内部是正确的.但是当我在设备上安装这个apk时,它显示错误的值$ {helloFromPOM}.
我做错了什么?
编辑
谢谢你的回答,我尝试了,但得到这个错误:
[ERROR]生成源时出错.org.apache.maven.plugin.MojoExecutionException:在com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.generateR(GenerateSourcesMojo.java:338)在com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.execute( GenerateSourcesMojo.java:102)在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)在org.apache .maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder .buildProject(LifecycleModuleBuilder.java:84)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)在org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183 )org.apache.maven.lifecycle.internal.LifecycleS tarter.execute(LifecycleStarter.java:161)org.apache.maven.maven.DefaultMaven.doExecute(DefaultMaven.java:320)org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)atg.apache.maven .cli.MavenCli.execute(MavenCli.java:537)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)org.apache.maven.cli.MavenCli.main(MavenCli.java:141 )在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在java.lang.reflect中.方法.invoke(Method.java:597)org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java: 230)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)org.codehaus.classworlds .Launche r.main(Launcher.java:47)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25)at java.lang.reflect.Method.invoke(Method.java:597)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)引起:com.jayway.maven.plugins .android.ExecutionException:ANDROID-040-001:无法执行:Command = cmd.exe/X/C""C:\ Program Files\Android\android-sdk\platform-tools\aapt.exe"package -m - JD:\ projects\myapp\target\generated-sources\r -MD:\ projects\myapp\AndroidManifest.xml -SD:\ projects\myapp\target\filtered-assets --auto-add-overlay -AD:\ projects\myapp\assets -I"C:\ Program Files\Android\android-sdk\platforms\android-8\android.jar"",结果= 1在com.jayway.maven.plugins.android.CommandExecutor …
我想使用Maven Resources Plugin在XML资源文件中设置XML模式位置:
<root xsi:noNamespaceSchemaLocation="${env.myxsdpath}" ...>
Run Code Online (Sandbox Code Playgroud)
这样做除了一件事 - 替换路径有双反斜杠而不是一个黑色斜杠,例如:
<root xsi:noNamespaceSchemaLocation="C:\\mypath\\myschema.xsd" ...>
Run Code Online (Sandbox Code Playgroud)
所以有两个问题:
环境变量myxsdpath是C:\mypath\myschema.xsd.在maven-resources-plugin没有超过指定要包含在过滤打开文件以外的任何特殊配置.
我有一个多模块项目,其中每个模块使用Apache Felix maven-bundle-plugin打包为OSGi包.整个项目使用父POM构建,列出上述模块.某些模块包含配置资源(例如.properties文件),这些资源不应该在捆绑包内用于部署,而是在专用配置文件夹中外部化.我的目标是创建一个分发文件夹(可能是一个zip文件),看起来像这样:
my-app-distribution
/bundles
module1-bundle.jar
module2-bundle.jar
etc.
/conf
external1.properties
external2.properties
etc.
Run Code Online (Sandbox Code Playgroud)
目录下的属性文件/conf是从各个模块的/target文件夹中手工挑选的文件.究其原因,.properties文件需要从目标文件夹与在src文件夹拾起的是,我使用Maven资源过滤,和源属性文件包含${..}了特定环境下的值的占位符.这些占位符在构建过程中正确解析 - 每个构建配置文件 - 并且target/文件夹包含实际的特定于环境的值.
我已经多次完成了这样的分发文件操作 - 对于具有可执行JAR的发行版等.在这种情况下,我想使用程序集描述符的"moduleSets"配置 - 很容易将所有二进制文件/ jar放入单个分发文件夹中使用moduleSet /二进制描述符.在maven-bundle-plugin中也很容易将某些文件排除在打包到OSGi包中.我遇到的唯一问题是创建/conf分发文件夹并在那里收集必要的属性文件.我试图在"moduleSet/sources"描述符中使用"fileSets"来仅包含**/target每个模块的特定文件,但这似乎不起作用.
有人有建议吗?必须有一个简单的方法.或者我根本不应该使用?
谢谢,
简历
@PetrKozelka我不确定将特定于不同软件包的配置文件提取到一个单独的模块中是个好主意.OSGi的重点在于捆绑包是独立的,并且可以在开发和分发中重复使用.只有在源代码中将功能实现和相关配置文件组合在一起才有意义.对于特定的发行版,虽然我可能需要提取一些文件 - 如果管理员需要控制某些参数.对于不同的分发/应用,这可能是不同的.装配配置可能会更改,但捆绑/源将保持不变.此外,每个捆绑包可能会被单独开发和使用,并非所有捆绑包都必须始终是同一个超级项目的一部分 - 正如您所假设的那样.工件的类型(例如"模型","服务","数据访问","配置"等),而不是功能域/特征.这种方法在单个应用程序/项目中正常工作,但在企业级别上失败,因为通常需要重用垂直组件的子集(按功能域划分).
至于你依赖于模块中的文件布局,我同意不应该有这样的依赖.文件可以通过其显式名称或命名约定来手工挑选 - 根据非常具体的发行版要求.(这正是我面临的情况.)
osgi distribution maven maven-assembly-plugin maven-resources-plugin
当我尝试从pom.xml加载过滤器文件时,我从eclipse标记中得到此错误.它会显示以下信息.
Error loading property file 'src/main/filters/filter.properties' (org.apache.maven.plugins:maven-resources-plugin:2.6:resources:default-resources:process-resources)
Run Code Online (Sandbox Code Playgroud)
pom.xml中:
<execution>
<id>default-resources</id>
<phase>process-resources</phase>
<goals>
<goal>resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<filters>
<filter>src/main/filters/filter.properties</filter>
</filters>
</configuration>
</execution>
Run Code Online (Sandbox Code Playgroud)
那是一个bug吗?
我看到这里已经有人问过:如何从命令行执行maven插件? 但我真的不明白答案.看起来语法的形式如下:
mvn foo:bar
Run Code Online (Sandbox Code Playgroud)
但我不确定foo和bar应该是什么.
具体来说,我已经配置了maven-resource-plugin,如下所示:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!--configuration here-->
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种排列,mvn artifactId|id|phase|goal:artifactidId|id|phase|goal但没有一种是有效的.我想我会停止试图强暴它,只是问互联网.此外,这是在任何地方记录?
我正在尝试使用maven-remote-resources-plugin在多模块maven项目中的模块之间共享大量资源。不幸的是,共享二进制资源在绑定过程中被破坏了,大概是通过过滤。
我确信在此阶段会发生损坏,因为从本地存储库中提取共享资源jar包含损坏的二进制文件。
是否可以关闭对Maven-remote-resources-plugin的过滤?
目前,我共享资源模块中的pom看起来像
<build>
<plugins>
<plugin>
<artifactId>maven-remote-resources-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud) 我有 maven 父子项目,其中父有多个子模块。一个子模块正在生成一个 jar,另一个则依赖于那个 jar。
项目结构如下: 一个父模块包含三个子模块。每个都有自己的 pom.xml。Child1生成jar文件,其他生成war文件。只有 Child3 依赖于 Child1 jar。
是否有使用 pom.xml 管理此类依赖项的最佳方法。
更新:当我在 Child3 中添加依赖项时,我能够构建 Child3 模块,但是当我尝试在 tomcat 上部署它时,它会抛出一个错误:
Caused by: java.lang.NoClassDefFoundError: org/ifxforum/xsd/_1/CIMBAcctInfoInqSvc
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:247)
... 57 more Caused by: java.lang.ClassNotFoundException: org.ifxforum.xsd._1.CIMBAcctInfoInqSvc
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104)
... 64 more
Run Code Online (Sandbox Code Playgroud)
我在 Child3 的 pom.xml 中的依赖为:
<dependency>
<groupId>myGroupId</groupId>
<artifactId>myArtifactId</artifactId>
<version>1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/myJar.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我可以看到org/ifxforum/xsd/_1/CIMBAcctInfoInqSvc在 jar 中。
我有一个包含以下行的 Dockerfile:
ENTRYPOINT ["java", "-Dconversion.rules.folder=/var/rules", "-jar", "/var/gateway-service-${project.version}.jar"]
我正在配置maven-resources-plugin如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-docker-artifacts</id>
<goals>
<goal>copy-resources</goal>
</goals>
<phase>package</phase>
<configuration>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<includes>
<include>${project.artifactId}.tar</include>
</includes>
</resource>
<resource>
<directory>${project.basedir}/src/main/docker</directory>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>${project.build.directory}/docker</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我期待着project.version被替换。由于某种原因,这不是真的。然后我使用调试模式运行构建,它输出以下内容:
[INFO] Copying 1 resource
[DEBUG] Copying file Dockerfile
[DEBUG] file Dockerfile has a filtered file extension
[DEBUG] filtering ...\src\main\docker\Dockerfile to ...\target\docker\Dockerfile
[DEBUG] no use filter components
Run Code Online (Sandbox Code Playgroud)
在我看来,过滤应该有效,但是中的文件target仍然包含${project.version}. 我在这里缺少什么?
我还尝试将其他非 Dockerfile 文件放入 Dockerfile 所在的同一文件夹中,但是那里也没有应用过滤...
maven ×11
java ×6
filtering ×2
maven-plugin ×2
android ×1
distribution ×1
docker ×1
osgi ×1
parent-child ×1
xml ×1
xsd ×1