为啥我需要将目标文件夹设置为源文件夹?第一次没有创建“目标”时项目是如何编译的?
Posted
技术标签:
【中文标题】为啥我需要将目标文件夹设置为源文件夹?第一次没有创建“目标”时项目是如何编译的?【英文标题】:Why do I need to set target folder as source folder? How was the project compiled for the first time when "target" wasn't cretaed?为什么我需要将目标文件夹设置为源文件夹?第一次没有创建“目标”时项目是如何编译的? 【发布时间】:2015-01-04 22:29:00 【问题描述】:我有一个现有的 maven 项目(使用的 IDE:Sprint 测试工具),我提供的帮助非常有限。我是 maven、java 和其他东西的新手(我知道基本的 java 并且已经在 java 中完成了自动化,但还没有从事过成熟的 java 项目),我必须自己或多或少地弄清楚我们所有的这个项目。 我试图编译包,但它在 main\src\java 中显示错误,即“无法解析消息”这种代码:Messages.. 我搜索了文件夹,发现只有一个 Messages.java 文件(包含该方法定义)在项目的“目标”文件夹的子文件夹中。因此,我被要求将此子文件夹的路径/文件夹添加为源文件夹,并且错误消失了。
我相信在编译/打包 maven 项目时会创建整个“目标”。并且,将路径添加到源文件夹会索引该路径并使其可用于编译/打包。所以,我想知道项目最初是如何编译和打包的。 我确实在 src\main\resources\folders..\Messages.properties 中看到 Messages.properties,Messages.java 中定义的方法似乎与此属性文件有某种关系。
我在网上搜索但找不到答案。请问stack可以帮我吗? 提前致谢。
【问题讨论】:
请提供您的 pom.xml 文件的您提供的信息有些稀疏,因此如果您可以提供 pom.xml 文件的 sn-p 会有所帮助 - 特别是 <plugins>
部分,以及顶层项目的目录结构,尤其是这个Messages
文件的位置。
target
目录是由 Maven 动态创建的,用于存储构建的输出是正确的,因此其内容中的任何内容都不应该是构建的依赖项。
最可能的情况是您的构建在compile
阶段之前运行了某种代码生成器(可能是Ant 任务或某些Maven 插件),这就是生成Messages.java
文件的原因依赖。
假设生成了Messages.java
,那么解决方案是将其放在src/main/gen/
目录中,并将该目录添加到您的构建路径(并删除目标)。
清理选项:可能不可能
如果您能确定是哪个插件创建了Messages.java
,并且可以修改其输出路径,那么这是最简单的选择——将其重新配置为写入src/main/gen/
而不是target/
。
肮脏但可靠的选择
可能出于某种原因,上述方法不可行。然后在你的 pom 文件中的pre-compile
阶段简单地将Messages.java
文件从target/
复制到src/main/gen/
:
<plugin>
<groupId>mojo.codehaus.org</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<executable>cp</executable>
<arguments>
<argument>target/Messages.java</argument>
<argument>src/main/gen/Messages.java</argument>
</arguments>
</configuration>
</plugin>
希望对您有所帮助。
【讨论】:
以上是关于为啥我需要将目标文件夹设置为源文件夹?第一次没有创建“目标”时项目是如何编译的?的主要内容,如果未能解决你的问题,请参考以下文章