Total Maven新手,尝试(与其他相当大的团队一起)将一堆巨大的遗留代码从蚂蚁转换为Maven。它工作得相当好,但我遇到了以下问题。
我有一个项目,我们称之为Core,在运行时需要加载一些不同项目下签入的文件,让我们称它们为资源A和B.核心代码在某个工作目录中启动,让我们称之为核心/运行时,并且它读取了一个属性文件,以确定从资源A和B加载的内容,以及相关资源的相对路径,例如
resource.ham=../../resources-a/files/ham.rsrc
resource.eggs=../../resources-b/files/eggs.rsrc
(是的,我知道这是生病和错误的,我们应该将资源作为资源,从JAR通过类加载器加载,也许是某种容器或依赖注入器或其他任何东西。我的想法,不是我当前的问题,现在不在桌面上修复。)
(说真的,请不要打扰我们建议我们解决潜在的问题。我们知道我们需要解决潜在的问题。我们知道我们需要修复底层问题问题之前我们切换到Maven,在我们切换到Maven之前,愚蠢的黑客实际上工作了。我知道它让你感觉良好,但它没有帮助。这是一个有着数万个课程的十年历史的代码库,并且相信我,有很多重要的事情是错的。)
这种相对路径攻击只是Eclipse中的一个问题,在开发期间;在实际部署的应用程序中,文件存在于完全不同的某个地方,并以更合理的方式加载。
无论如何,当这些都是vanilla Eclipse项目时,这一切都运行正常,所以有问题的目录有如下路径:
c:\workspace\core\runtime
c:\workspace\resources-a\files
c:\workspace\resources-b\files
但是,现在将这些作为Maven项目检出,现在的目录如下:
c:\workspace\core\runtime # Inexplicably unchanged
c:\workspace\maven.8675309\resources-a\files
c:\workspace\maven.6345789\resources-b\files
问题:
maven.7762323
目录消失吗?任何解决方案都必须是我可以检入SVN的解决方案,以便我团队中的其他开发人员可以直接使用它。
好的,我想出了maven.[number]
目录的来源:当您在SVN存储库中选择父目录并说“Check out as Maven project”时,您会得到一个对应的maven.[number]
目录父项,所有实际项目都作为子目录。如果只有代码实际上都在同一个父目录中,或者甚至在同一个SVN存储库中,那将非常方便。
答案 0 :(得分:0)
- 我可以让这些maven.7762323目录消失吗?
他们来自哪里? 签出Maven项目
(编辑:正如OP在评论中写道的那样,这些目录来自m2eclipse,它允许从SVN中检出maven项目。我没有使用这个功能所以我不太了解它。但是,经过一些谷歌搜索后,我的理解是这些名称是暂时的,m2eclipse应该在结账时重命名。也许在结帐时eclipse出现了问题。我实际上并不确定。)
- 如果没有,Eclipse中是否有某种方法可以获取项目目录的路径,然后将其作为系统属性传递给启动配置,或类似的东西?
Eclipse有一个{build_project}
变量,可以在运行时配置的参数中使用。在你的情况下,{workpsace_loc}
可能会更合适。整个列表随运行时配置的 Arguments 选项卡中的说明一起提供。
(编辑:我仍然不确定我是否达到了真正的目标,但我觉得使用svn:externals
会有所帮助。)
答案 1 :(得分:0)
好的,解决方案是使用{workspace_loc:
项目名称 }
变量将少数项目目录设置为系统属性,并使用它们推断其他所有内容。现在,如果我能弄清楚如何让加载插件JAR的荒谬系统与Maven一起工作......