scons和java,如何处理package-info.java

问题描述 投票:1回答:1

我的目标

我正在尝试将ant替换为scons以构建Java文件并创建jar文件。

问题

  1. 预期结果:下面的代码env.Java(target = 'classes', source = 'src')将生成所有.class文件,然后,当启动一个干净的构建(不进行任何更改)时,scons应该告诉我我的tartet已启动-迄今为止
  2. 实际结果:因为package-info.java文件为空,所以scons Java构建器未生成.class文件。副作用是每次启动构建时,scons告诉我他需要生成package-info.class,然后,每次重新启动构建。永远不会认为目标是最新的。

到目前为止我尝试过的:

此问题has been asked很久以前。但是,该解决方案不再起作用,它试图做的是从目标中删除package-info.class:

tgts = env.Java(target = 'classes', source = 'src')
for f in tgts:
  if f.path.endswith('package-info.class'):
    tgts.remove(f)

jar = env.Jar(target = 'dds-interface.jar', source = tgts)
Default(jar)

这会产生错误

AttributeError: <class 'SCons.Node.FS.File'> object has no attribute 'upper':
  File "C:\SVN\products\faa_mx\vs2017.install2\SConstruct", line 31:
    sc_manager.build()
  File "C:\SVN\products\faa_mx\vs2017.install2\cm\env\scons\utilities\sconscriptManager.py", line 43:
    cache = SCons.Script.SConscript(str(script).strip(), exports='envService parentEnv vcxprojList', variant_dir=utils.createVariantDir(envService, script), duplicate=0)
  File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Script\SConscript.py", line 614:
    return method(*args, **kw)
  File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Script\SConscript.py", line 551:
    return _SConscript(self.fs, *files, **subst_kw)
  File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Script\SConscript.py", line 256:
    call_stack[-1].globals)
  File "C:\SVN\products\faa_mx\vs2017.install2\fwk\network\dds\simd\java\api\java_api.sc", line 51:
    source = tgts)
  File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Environment.py", line 224:
    return self.method(*nargs, **kwargs)
  File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Tool\jar.py", line 169:
    target_classes.extend(file_to_class(s))
  File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Tool\jar.py", line 143:
    if(str(_my_normcase(s)).endswith(java_suffix)):
  File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Node\FS.py", line 366:
    return x.upper()
  File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Node\FS.py", line 632:
    (self.__class__, attr))

根据我读到的文档,Jar只接受java文件或'classes'作为来源。

问题:

  1. 是否可以告诉scons强制生成package-info.class文件(类似于ant)?
  2. 是否有可能只从项目中删除package-info.java文件而不会破坏所有内容?我认为文档对我们的项目不重要。

编辑

我已经找到解决方法,我应该将-Xpkginfo:always传递给scons JAVACFLAGS。不幸的是,当我传递此参数时,我的javac版本(1.7.0_25)崩溃了。

java ant scons
1个回答
0
投票

最后,这很容易,javac编译器有一个参数来强制生成package-info.class

只需将-Xpkginfo:always传递给scons JAVACFLAGS。不幸的是,当我传递此参数时,我的javac版本(1.7.0_25)崩溃了。 javac 1.8可以很好地使用此参数。

© www.soinside.com 2019 - 2024. All rights reserved.